关于python中的开关的一些问题

时间:2016-08-14 09:22:57

标签: python python-2.7 pygtk glade pygobject

这是我在StackOverflow的第一个问题,所以如果有些信息没有出现或者我错过了一些重要信息,请耐心等待,但无论如何我都会尽我所能:)

最近我开始编写Python2.7代码,所以我不太擅长。在玩PyGtk,PyGObject,Glade等时,我发现了一些特别关于开关的东西(Haven没有尝试过任何其他小部件,所以我不知道它是否发生在其他地方。很可能它不会,我希望...)

我用一个"窗口制作了一个非常基本的GUI"加一个"开关"使用Glade

我的目标是在用户尝试激活它之后停用开关,如果以前提出了一些例外,例如:

  • 激活它 - > *发现错误 - > *停用它

我制作了一些代码,过了一会儿,我注意到这段代码创建了一个类似循环的块,然后阻止了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"链接" switchie"对象"嗨" func每当" switchie"点击了。

但是如果我执行此操作并尝试打开开关,GUI就会挂起。我确实尝试通过脚本&命令行并添加"打印开关状态",导致无限循环(True& False)

我尝试过我制作的许多其他功能,但他们都无法解决这个问题。事实上,这就是"本质"我所做的所有其他功能。

为什么会这样?

循环在哪里?

我错了吗?

感谢帮助!

(如果你需要查看其余的错误功能,只需要问他们,但我认为他们不会帮助......)

1 个答案:

答案 0 :(得分:1)

你想像这样连接开关:

switchie.connect("""activate""", Hi)

每次点击它时,只会被称为一次。你所做的是在它发生变化之后连接到信号,所以它不断变化,永远不会追赶。您还需要更改

def Hi(switch, active):

def Hi(switch, active = None):

用于键盘支持。