嘿,我试图将按钮与不同功能链接起来,我定义了一个新按钮,如下所示:第一次单击:print a;第二次打印b。但是,该代码不起作用。无论单击多少次按钮,它都只会打印“ b”。谢谢您的帮助!
def a():
print("a")
def b():
print("b")
class nextbutton(QPushButton):
window.count += 1
print(window.count)
def function(self):
if window.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
mybutton = nextbutton()
ui.next4.clicked.connect(mybutton.function)
答案 0 :(得分:0)
一个问题是,单击按钮时不会增加计数,而是在类定义中尝试这样做。
class nextbutton(QPushButton):
window.count += 1
print(window.count)
上面的两行仅在下面的行创建时执行。
mybutton = nextbutton()
要获得所需的效果,请在function
方法内移动这些行,该方法会在按下按钮时接收信号。
class nextbutton(QPushButton):
def function(self):
window.count += 1
print(window.count)
if window.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
您可能希望将计数存储在按钮对象本身上,而不是引用窗口。这样一来,您可以拥有此按钮的多个副本,每个副本都可以跟踪其当前计数并相应地执行操作。
class nextbutton(QPushButton):
count = 0
def function(self):
self.count += 1
if self.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
然而,以上仍然无法按照您的要求进行。下一节将a
和b
函数连接到next4
单击的信号。由于您可以在同一个信号上连接多个插槽,因此现在将触发3种行为-运行
if self.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
请记住,如果您在这里,您已经触发了信号。您可以直接直接调用这些函数。
if self.count == 1:
a()
else:
b()
其他一些建议
以下代码令人惊讶。您的用户界面中有一个定义为ui.next4
的按钮,但是在这里您要创建另一个按钮,只是为了保留用于调用另一个函数的函数。
mybutton = nextbutton()
ui.next4.clicked.connect(mybutton.function)
您可以消除nextbutton并使其本身具有功能:
def nextbutton_clicked(self):
window.count += 1
print(window.count)
if window.count == 1:
a()
else:
b()
然后按如下所示连接
ui.next4.clicked.connect(nextbutton_clicked)
最后,我建议将nextbutton
重命名为NextButton
,因为它是一门课程。这只是一个约定,但它是一个很好的学习者,因为它使您的代码更易于阅读。另外,我建议为您的方法使用一个不同的名称,该名称由按钮button_clicked
或类似按钮触发。