这是我在StackOverflow的第一个问题,如果有些信息不存在或者我错过了一些重要的东西,请耐心等待,但无论如何我会尽力的:)
最近我开始用Python2.7编写代码,所以我不太擅长它。在玩PyGtk、PyGObject、Glade等的时候,我发现了一些关于开关的特别之处(还没有尝试过其他小部件,所以我不知道它是否发生在其他地方)。很可能不会,我希望……)
我用Glade制作了一个非常基本的GUI,其中有一个“窗口”和一个“开关”
我的目标是在用户试图激活开关之后,如果之前出现了一些异常,比如:
激活它-->*发现错误-->*停用它
我编写了一些代码,过了一会儿,我注意到这段代码创建了一个类似循环的块,随后阻塞了GUI的窗口:
builder = Gtk.Builder()
window1 = builder.get_object('window')
switchie = builder.get_object('switchie')
switchie.set_active(False)
def Hi(switch, active):
print switchie.get_active()
switchie.set_active(not switchie.get_active())
switchie.connect("""notify::active""", Hi)
window1.set_position(Gtk.WindowPosition.CENTER)
window1.connect("delete-event", Gtk.main_quit)
window1.show_all()
如果我是对的,“switchie.connect”links“switchie”object和“Hi”func只要“switchie”被点击。
但是如果我执行这个并尝试打开开关,GUI就会挂断。我试着通过脚本和命令行来执行,并添加了“print switch state”,结果是一个无休止的循环(True和False)
我试了很多其他的功能,但他们都不能解决这个问题。实际上,这是我做的所有其他函数的“本质”。
为什么会这样?
回路在哪里?
我说错了吗?
感谢您的帮助!
(如果你需要看我的其他有问题的功能,尽管问他们,但我认为他们帮不上忙……)
最佳答案
你想这样连接开关:switchie.connect("""activate""", Hi)
每次单击都只调用一次。你所做的就是在信号发生变化后,把它连接起来,所以它一直在变化,从来没有赶上过。你也会想改变def Hi(switch, active):
到def Hi(switch, active = None):
用于键盘支持。
关于python - 有关python中开关的一些问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38940826/