我是使用glade的新手,但我只做了一些小例子,我从来没有尝试过使用CheckButtons,并希望制作如下图所示的GUI:
想法是使用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而不是编程。
答案 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_toggled
和on_checkb2_toggled
)。
您可以选择最适合的方法。我还建议您查看Python Gtk 3 Tutorial,其中包含您可以尝试的示例。
祝你好运。