在 python 和 Glade 中使用复选框

Using checkbox with python and Glade

我刚开始使用 glade,但我只做了一些小例子,我从未尝试过使用 CheckButtons,我想制作如下图所示的 GUI:

我的想法是使用 ON 和 OFF 按钮,根据所选的复选按钮打印不同的消息。 我读过这个网站上的内容“ “还有一些,但我不知道如何开始。 我想至少举一个这样的例子: 如果Checkbutton被选中打印:这个checkbutton被选中并检查它是否被选中。

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

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,而不是通过编程。

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

无论如何,您可以通过编程方式完成。例如,有一个共同的回调,它知道哪个复选按钮触发了它并做一些有用的事情(除非代码可重用,否则会更混乱)或为每个复选按钮设置单独的 handlers/callbacks。

让我们以您的示例和设置处理程序为例。方法是,获取前 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

如您所见,通用方法(on_checkbox_toggled)将针对复选框 1、2 和 3 触发,我们可以通过名称来识别它们。复选框 1 和 2 也将有一个具体且不同的处理程序(分别为 on_checkb1_toggledon_checkb2_toggled)。

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

祝你好运。