Python 获取 class 之外的参数

Python get parameter outside of class

我有这个代码:

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。

我希望我可以在 class 之外调用函数 1,这只有在按下按钮时才会成立。

如果您必须在单击按钮时执行某些操作,那么您应该直接在 func1 中执行。

但是如果你想设置一些稍后使用的值,那么你应该使用 self.value 将这个值保存在这个 class 的实例中 - 稍后其他函数应该得到这个值 -没有 运行ning 功能

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 中阻塞 event-loop 并且它可能会冻结 GUI 因此它可能需要 运行 while-loop inside 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 有自己的 class QThread 你应该使用它。