【问题标题】:Python + pygtk generate table of checkboxes from databasePython + pygtk 从数据库生成复选框表
【发布时间】:2012-11-11 19:19:45
【问题描述】:

我正在处理一个项目,我想从 MySQL 数据库加载数据并将其显示在 PyGTK 应用程序中,以便于概览和配置。我的目标是让程序根据数据库内容自动添加新行,即。如果我向数据库添加一个新命令,我不需要对我的 GTK 应用程序进行任何更改。

这是我的测试数据库:

+----+----------+---------+----+--------+
| id | name     | enabled | op | desc   |
+----+----------+---------+----+--------+
|  1 | !help    |       1 |  0 | blabla |
|  2 | !version |       1 |  1 | blabla |
|  3 | !tp      |       0 |  1 | blabla |
+----+----------+---------+----+--------+

我想(动态地)创建一个看起来像这样的 GTK 应用程序: http://i.imgur.com/EMhkz.png

我之前有一些使用 python 的经验,但没有那么多 GTK,我不确定如何解决这个问题。有人可以给我一个工作示例吗?

向奥斯卡致敬

【问题讨论】:

  • 您的目标平台是什么(Windows、Linux)? GTK2,GTK3? PyGTK 仅适用于 GTK2...
  • Python 2.7,GTK2。同时使用 Linux 和 Windows。

标签: python mysql checkbox gtk pygtk


【解决方案1】:

你可以试试这个。我会让你填写细节,比如 MySQL 的东西。这里的重要部分,使小部件看起来均匀分布是参数

gtk.HBox(homogeneous=True)

否则他们会到处都是,只占用他们需要展示自己的空间。

希望这就是你所追求的。

import pygtk
pygtk.require20()
import gtk

data = [['1', '!help',    '1', '0', 'blabla'], 
        ['2', '!version', '1', '1', 'blabla'], 
        ['3', '!tp',      '0', '1', 'blabla']]

def main():
    window = gtk.Window()
    window.set_title('Dynamic controls')
    window.connect("delete_event", gtk.main_quit)

    vbox = gtk.VBox()
    window.add(vbox)

    for row in data:
        hbox = gtk.HBox(homogeneous=True)
        hbox.pack_start(gtk.Label(row[1]))
        enabled_checkbox = gtk.CheckButton('Enabled')
        enabled_checkbox.set_active(row[2] is '1')
        hbox.pack_start(enabled_checkbox)
        op_checkbox = gtk.CheckButton('OP')
        op_checkbox.set_active(row[3] is '1')
        hbox.pack_start(op_checkbox)
        hbox.pack_start(gtk.Label(row[4]))
        vbox.pack_start(hbox)


    window.show_all()
    gtk.main()

if __name__ == '__main__':
    main()

【讨论】:

  • 詹姆斯您好,非常感谢。正是我想要的。我知道会有一些非常简单的方法来做到这一点:) 是否也可以循环通过 vbox-rows 从复选框中获取当前状态并生成一个包含数据的新列表?
  • 示例:我为 !tp 勾选“已启用”并在某处按应用,然后程序将创建一个新列表,如果第 3 行如下所示:['3', '!tp', ' 1', '1', 'blabla'] 再次感谢您的出色解决方案。
  • 你想做什么?如果有帮助,您可以将更改事件侦听器添加到 CheckButton。
  • 我正在尝试为这些数据库条目构建一个管理应用程序。我的想法是从数据库加载当前值,并能够使用复选框更改它们,点击应用按钮并将更改写回数据库。
  • 可以迭代检查按钮,但您最好设置一个单独的数据结构并使用检查按钮的切换事件上的回调更改此结构中的值,传递回调一些数据来识别检查按钮。即 enabled_checkbox.connect("toggled", callback, "check button 1") 具有签名 def callback(self, widget, data=None) 的回调,您可以使用数据来识别您正在编辑的行。然后,您可以稍后使用 apply 扫描它并将结果应用到数据库
【解决方案2】:

使用 libgda。它为您提供自动绑定到数据库内容的树模型。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2016-03-17
  • 2016-03-15
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多