是否有任何DataGrid/DataGridView组件
GUI组件库的一部分,如Qt/GTK/WxWidgets/等。
具有相同的功能性和灵活性
是C#/WPF还是C#/Winforms DataGridView?
(主要用于Python 3...跨平台/避免MS .net)
我的意思是与Dataset组件协同工作
或者类似的范例/功能来实现CRUD?
我不想在这个阶段更多地扩展这个问题...
我将等待一些答案来展开讨论……
发布于 2018-02-19 09:24:34
免责声明:我从未使用过C#WPF或您提到的其他工具。
Disclaimer2:这个应用还没有CRUD。它只有读支持。
最后,不能保证这甚至接近你正在寻找的东西。我发帖是因为似乎没有人有更好的解决方案。
#!/usr/bin/python3
# sql_window.py
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import psycopg2, sys
class SQLWindowGUI :
def __init__(self):
self.db = psycopg2.connect(dbname = 'trial_new_db', user = 'postgres', password = 'true', host = '192.168.0.120')
button = Gtk.Button('Run SQL')
button.set_property('valign', Gtk.Align.END)
button.set_property('halign', Gtk.Align.END)
button.connect('clicked', self.run_sql_clicked)
overlay = Gtk.Overlay()
overlay.add_overlay(button)
self.sql_buffer = Gtk.TextBuffer()
self.sql_buffer.set_text("SELECT id, name FROM contacts")
textview = Gtk.TextView.new_with_buffer(self.sql_buffer)
textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
overlay.add (textview)
pane = Gtk.Paned()
pane.set_orientation(Gtk.Orientation.VERTICAL)
pane.set_position(100)
pane.add1(overlay)
self.scrolledwindow = Gtk.ScrolledWindow()
self.treeview = Gtk.TreeView()
self.scrolledwindow.add(self.treeview)
self.sql_error_buffer = Gtk.TextBuffer()
self.textview = Gtk.TextView.new_with_buffer(self.sql_error_buffer)
self.textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
box = Gtk.Box()
box.pack_start(self.scrolledwindow, True, True, 0)
box.pack_start(self.textview, True, True, 0)
pane.add2(box)
self.window = Gtk.Window()
self.window.add(pane)
self.window.set_title("SQL Window")
self.window.set_default_size(600, 500)
self.window.show_all()
self.window.connect('destroy', Gtk.main_quit)
def run_sql_clicked (self, button):
for column in self.treeview.get_columns():
self.treeview.remove_column(column)
start_iter = self.sql_buffer.get_start_iter ()
end_iter = self.sql_buffer.get_end_iter ()
string = self.sql_buffer.get_text(start_iter, end_iter, True)
cursor = self.db.cursor()
try:
cursor.execute(string)
except Exception as e:
self.sql_error_buffer.set_text(str(e))
self.textview.set_visible(True)
self.scrolledwindow.set_visible(False)
self.db.rollback()
return
#probably an UPDATE, report rows affected
if cursor.description == None:
result = "%s row(s) affected" % cursor.rowcount
self.sql_error_buffer.set_text(result)
self.textview.set_visible(True)
self.scrolledwindow.set_visible(False)
self.db.rollback()
return
#create treeview columns and a liststore to store the info
self.textview.set_visible(False)
self.scrolledwindow.set_visible(True)
type_list = list()
for index, row in enumerate(cursor.description):
column_name = row.name
type_ = row.type_code
if type_ == 23:
type_list.append(int)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn(column_name, renderer, text=index)
self.treeview.append_column(column)
column.set_sort_column_id(index)
elif type_ == 16:
type_list.append(bool)
renderer = Gtk.CellRendererToggle()
column = Gtk.TreeViewColumn(column_name, renderer, active=index)
self.treeview.append_column(column)
column.set_sort_column_id(index)
else:
type_list.append(str)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn(column_name, renderer, text=index)
self.treeview.append_column(column)
column.set_sort_column_id(index)
store = Gtk.ListStore()
store.set_column_types(type_list)
self.treeview.set_model(store)
for row in cursor.fetchall():
# do a convert, cell by cell, to make sure types are correct
store_row = list()
for index, element in enumerate(row):
store_row.append(type_list[index](element))
store.append (store_row)
self.db.rollback()
cursor.close()
def main_gui():
app = SQLWindowGUI()
Gtk.main()
if __name__ == "__main__":
sys.exit(main_gui())历史:我将其创建为PGAdmin的轻量级替代品,以便在Postgres中简单地查看数据。它应该可以在任何安装了psycopg2和Gtk3的Linux发行版上运行。理论上,它应该是跨平台的。
https://stackoverflow.com/questions/47022253
复制相似问题