2024-05-29 11:23:06 发布
网友
是否有DataGrid/DataGridView组件 GUI组件库的一部分,如Qt/GTK/WxWidgets/etc. 具有相同的功能和灵活性 作为C#/WPF或C#/Winforms DataGridView?
(主要用于Python3。。。跨平台/避开MS.net)
我的意思是与数据集组件协同工作 或者类似的范例/功能来实现CRUD?
我不想在这一阶段继续提问… 我将等待一些答案来展开讨论…
免责声明:我从未使用过C#WPF或您提到的其他工具。在
免责声明2:这个应用程序还没有积垢。它只有读支持。在
最后,也不能保证这是你所要找的。我发帖是因为似乎没有人有更好的解决办法。在
#!/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发行版。理论上,应该是跨平台的。在
免责声明:我从未使用过C#WPF或您提到的其他工具。在
免责声明2:这个应用程序还没有积垢。它只有读支持。在
最后,也不能保证这是你所要找的。我发帖是因为似乎没有人有更好的解决办法。在
历史:我创建它作为PGAdmin的一个轻量级替代品,只需在Postgres中查看数据。它应该适用于大多数安装了psycopg2和Gtk3的Linux发行版。理论上,应该是跨平台的。在
相关问题 更多 >
编程相关推荐