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
你应该使用它。
我有这个代码:
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
你应该使用它。