首先,您正在使用Gtk.Builder connect_signals
方法,該方法假定您已經通過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()
運行代碼,我們得到的控制檯輸出(舉例):
$ 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_toggled
和on_checkb2_toggled
)。
您可以選擇最適合的方法。我還建議您檢查Python Gtk 3 Tutorial,其中有可以嘗試的示例。
祝你好運。
謝謝你們,真的有幫助,如果可以的話,告訴我更多的事情,當點擊按鈕時,我可以改變按鈕的顏色嗎? –
@RicardoAlves是的,你可以改變按鈕的顏色,但應該通過CSS完成。選中此[概述](https://developer.gnome.org/gtk3/stable/chap-css-overview.html)。 –
何塞方特Im葡萄牙兩,:)。即時通訊尋找你給我的鏈接,我不知道如何連接的CSS,一個Python腳本,如果你能告訴我,我將非常感激。 對不起,並且非常感謝您的幫助。 –