Some questions about switches in python

拟墨画扇 提交于 2019-12-10 19:16:47

问题


This is my first Question here at StackOverflow, so please be patient with me if some info isn't present or I missed something important, but anyways i'll do my best :)

Recently I started to code in Python2.7, so I'm not very good at it. While playing with PyGtk, PyGObject, Glade, etc I found something particular about switches (Haven't tried with any other widget, so I don't know if it happens somewhere else. Most likely it doesn't, I hope...)

I made a very basic GUI with a single "window" plus a "switch" using Glade

My objective was to deactivate switch after user tried to activate it if some exeption raised up before, something like:

  • Activate it --> * Found error --> * Deactivate it

I made some code, and after a while, I noted that THIS piece of code created a loop-like block, blocking GUI's window afterwards:

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()

If i'm right, "switchie.connect" links "switchie" object with "Hi" func whenever "switchie" gets clicked.

But if I execute this and try to turn switch on, GUI hangs up. I did try to execute this via script & command-line and adding the "print switch state", resulting in an endless loop (True & False)

I tried with many other funcs I made, but neither of them could solve this issue. In fact, this is the "essence" of all the other funcs I made.

Why does this happen?

Where's the loop?

Am I wrong in some line?

Help is appreciated!

(If you need to see the rest of my faulty funcs, just ask for 'em, but I don't think they'll help...)


回答1:


You want to hook up the switch like this:

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

This will only get called once for every time it is clicked. What you were doing is hooking up to the signal after it changed, so it was constantly changing, and never catching up. You will also want to change

def Hi(switch, active):

to

def Hi(switch, active = None):

for keyboard support.



来源:https://stackoverflow.com/questions/38940826/some-questions-about-switches-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!