我有這個代碼:
class X(object):
def func1(self, arg):
print("Button {0} clicked".format(arg))
return True
class Y(X):
def func2(self):
self.btn = QPushButton()
self.btn.clicked.connect(partial(self.func1 , True ) )
#while func1 ==True :
#do something
當我按下按鈕時,arg 引數將設定為 True。
我希望我可以在課堂外呼叫函式 1,這只有在按下按鈕時才會成立。
uj5u.com熱心網友回復:
如果您必須在單擊按鈕時執行某些操作,那么您應該直接在內部執行func1。
但是,如果您想設定一些稍后將使用的值,那么您應該使用self.value將這個值保存在這個類的實體中 - 稍后其他函式應該得到這個值 - 而不運行函式
class X(object):
def __init__(self):
self.value = False # set default value at start
def func1(self, arg):
print("Button {0} clicked".format(arg))
self.value = True # change value when click
class Y(X):
def func2(self):
self.btn = QPushButton()
self.btn.clicked.connect(partial(self.func1, True))
# create instance of class
x = Y()
# access value in instance
while x.value is True:
#do something
但是while-loop 可能會阻塞 GUI 中的事件回圈,并且可能會凍結 GUI,因此它可能需要在while內部運行 -loop thread。或者它可能需要一些timer在沒有回圈和沒有thread.
class X(object):
def __init__(self):
self.value = False # set default value at start
self.thread = None # set default value at start
def func1(self, arg):
print("Button {0} clicked".format(arg))
self.value = True # change value when click
if self.thread != None:
print("thread already running")
else:
self.thread = threading.Thread(taget=self.long_running_loop)
self.thread.start()
def long_running_loop(self):
while self.value is True:
#do something
self.thread = None # inform function that it can run it again
class Y(X):
def func2(self):
self.btn = QPushButton()
self.btn.clicked.connect(partial(self.func1, True))
# create instance of class
x = Y()
我用標準展示了例子,Thread但PyQt有自己的類QThread,你應該使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482822.html
上一篇:未安裝QML模塊
下一篇:如何獲得可見專案邊界框?
