在python和Glade中使用复选框

在python和Glade中使用复选框,python,checkbox,gtk,glade,Python,Checkbox,Gtk,Glade,我对使用glade是新手,但我只做了一些小示例,从未尝试过使用CheckButtons,我想制作下图中的GUI: 其想法是使用“开”和“关”按钮,根据所选的复选按钮打印不同的消息。 我读过这个网站上的内容“ “还有一些,但我根本不知道如何开始。 我想至少举一个这样的例子: 如果选中了Checkbutton打印:选中此Checkbutton并检查是否选中 为了运行我知道的界面,我做了以下操作: from gi.repository import GTK builder = Gtk.Builde

我对使用glade是新手,但我只做了一些小示例,从未尝试过使用CheckButtons,我想制作下图中的GUI:

其想法是使用“开”和“关”按钮,根据所选的复选按钮打印不同的消息。 我读过这个网站上的内容“ “还有一些,但我根本不知道如何开始。 我想至少举一个这样的例子: 如果选中了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方法,它假设您已经通过Glade声明了信号处理程序方法名称(回调方法)

无论如何,您可以通过编程来完成。例如,有一个公共回调,知道哪个checkbutton触发了它,并做一些有用的事情(除非代码是可重用的,否则会更混乱),或者为每个checkbutton设置单独的处理程序/回调

让我们以您的示例和设置处理程序为例。方法是,获取前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()
运行代码,我们得到控制台输出(示例):

如您所见,将为复选框1、2和3触发公共方法(
on_checkbox_toggled
),我们可以通过名称识别它们。复选框1和2也将有一个具体而独特的处理程序(
on_checkb1_toggled
on_checkb2_toggled

您可以选择最适合的方法。我还建议您检查哪些示例可以尝试


祝你好运。

谢谢大家,这真的很有帮助,如果可以的话,再告诉我一件事,我可以更改按钮单击时的颜色吗?@RicardoAlves是的,你可以更改按钮颜色,但这应该通过CSS完成。检查这个。何塞·方特我是葡萄牙人,二号:)。我正在寻找你给我的链接,我不知道如何用python脚本连接css,如果你能告诉我,我将非常感激。很抱歉,非常感谢您的帮助。@RicardoAlves Bom dia:)您可以尝试以下要点来获得一个简单的python示例:Obrigado JoséFonte,谢谢。我现在唯一的问题是按下复选按钮时改变其颜色。如果你能帮忙的话,那就太可怕了。
$ 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