使用python和Glade复选框

时间:2017-07-25 12:21:23

标签: python checkbox gtk glade

我是使用glade的新手,但我只做了一些小例子,我从来没有尝试过使用CheckButtons,并希望制作如下图所示的GUI:

enter image description here

想法是使用ON和OFF按钮,根据所选的检查按钮打印不同的信息。 我已经阅读了这个网站上的内容“  “还有一些,但我不知道如何开始。 我想至少有一个这样的例子: 如果选中了“检查”按钮,则打印:选中此复选按钮并检查是否已选中。

要运行我知道的界面,我这样做了:

from gi.repository import GTK

builder = Gtk.Builder()
builder.add_from_file("Port_Manager.glade")
handlers = {

}

builder.connect_signals(handlers)
window = builder.get_object("windowPort")
window.show_all()

Gtk.main()

请您给我一个使用复选框的简单示例吗?我手动完成了Glade中的GUI而不是编程。

1 个答案:

答案 0 :(得分:1)

首先,您正在使用Gtk.Builder connect_signals方法,该方法假定您已通过林间空地声明了信号处理程序方法名称(回调方法)。

无论如何,你可以通过编程方式完成。例如,有一个共同的回调,它知道哪个检查按钮触发它并执行一些有用的操作(除非代码可重用,否则更麻烦)或为每个检查按钮设置单独的处理程序/回调。

让我们举例并设置处理程序。方法是,获取前3个复选框,将具体回调附加到复选框1和2,并将通用处理程序附加到复选框1,2和3:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

def on_checkb1_toggled(button):
    if button.get_active():
        state = "Active"
    else:
        state = "Inactive"
    print "Checkbutton 1 toggled, state is " + state

def on_checkb2_toggled(button):
    if button.get_active():
        state = "Active"
    else:
        state = "Inactive"
    print "Checkbutton 2 toggled, state is " + state

def on_checkbutton_toggled(button, name):
    if button.get_active():
        state = "Active"
    else:
        state = "Inactive"
    print "Common handler: Checkbutton " + name + " toggled, state is " + state

builder = Gtk.Builder()
builder.add_from_file("Port_Manager.glade")
handlers = {

}

builder.connect_signals(handlers)
window = builder.get_object("windowPort")

## Added code

checkb1 = builder.get_object("checkbutton1")
checkb2 = builder.get_object("checkbutton2")
checkb3 = builder.get_object("checkbutton3")
# ...

checkb1.connect ("toggled", on_checkb1_toggled)
checkb2.connect ("toggled", on_checkb2_toggled)

checkb1.connect ("toggled", on_checkbutton_toggled, "1")
checkb2.connect ("toggled", on_checkbutton_toggled, "2")
checkb3.connect ("toggled", on_checkbutton_toggled, "3")

window.connect("destroy", Gtk.main_quit)

## End added code

window.show_all()

Gtk.main()

运行代码,我们得到控制台输出(示例):

$ python checkbuttons.py 
Checkbutton 1 toggled, state is Active
Common handler: Checkbutton 1 toggled, state is Active
Checkbutton 2 toggled, state is Active
Common handler: Checkbutton 2 toggled, state is Active
Common handler: Checkbutton 3 toggled, state is Active
Common handler: Checkbutton 3 toggled, state is Inactive
Common handler: Checkbutton 3 toggled, state is Active

如您所见,将为复选框1,2和3触发常用方法(on_checkbox_toggled),我们可以按名称识别它们。复选框1和2也将具有一个具体且独特的处理程序(分别为on_checkb1_toggledon_checkb2_toggled)。

您可以选择最适合的方法。我还建议您查看Python Gtk 3 Tutorial,其中包含您可以尝试的示例。

祝你好运。

相关问题