嘿我试图用不同的功能链接我的按钮,我定义了一个新的按钮如下:第一次点击:打印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)
一个问题是,单击按钮时您没有递增计数,而是尝试在类定义中执行此操作。
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()
Some other suggestions
您的代码的下列内容令人惊讶。您在UI中定义了一个按钮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
或类似物触发。