如何让 PyQt5 QPushButton 在不同的按钮点击时执行不同的命令
How to get a PyQt5 QPushButton to do different commands on different button clicks
我希望 QPushButton 在不同的点击时做不同的事情。第一次单击它应该执行一个命令,而在下一次单击时,它应该执行另一个命令。我试图编写一个程序来执行它,但它只执行一个命令,而不执行另一个
我的代码一:
import PyQt5.QtWidgets as pyqt
import sys
ongoing = False
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.windows()
def windows(self):
w = pyqt.QWidget()
layout = pyqt.QGridLayout()
self.setLayout(layout)
button = pyqt.QPushButton('click me', w)
layout.addWidget(button)
if not ongoing:
button.clicked.connect(click_one)
else:
button.clicked.connect(click_two)
self.show()
w.show()
def click_one():
global ongoing
print('one')
ongoing = not ongoing
def click_two():
global ongoing
print('two')
ongoing = not ongoing
if __name__ == '__main__':
app = pyqt.QApplication(sys.argv)
x = Stuff()
app.exec_()
我应该怎么做才能解决这个问题?
由于 class 初始化时 ongoing
的值为 False,按钮的点击信号连接到 click_one()
。将按钮连接到一个初始插槽,然后根据 ongoing
.
的值调用所需的函数
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.windows()
def windows(self):
w = pyqt.QWidget()
layout = pyqt.QGridLayout()
self.setLayout(layout)
button = pyqt.QPushButton('click me', w)
layout.addWidget(button)
button.clicked.connect(on_click)
self.show()
w.show()
def on_click():
global ongoing
if not ongoing:
click_one()
else:
click_two()
我建议用属于 class 的函数和 ongoing
变量重写代码。分配给变量 w
的 QWidget 似乎是多余的,因为 QPushButton 然后被添加到 class 的布局中,所以它的父级无论如何都会改变。
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.ongoing = False
self.windows()
def windows(self):
layout = pyqt.QGridLayout(self)
button = pyqt.QPushButton('click me')
layout.addWidget(button)
button.clicked.connect(self.on_click)
self.show()
def on_click(self):
self.click_one() if not self.ongoing else self.click_two()
self.ongoing = not self.ongoing
def click_one(self):
print('one')
def click_two(self):
print('two')
您可能也有兴趣使用 checkable button。
我希望 QPushButton 在不同的点击时做不同的事情。第一次单击它应该执行一个命令,而在下一次单击时,它应该执行另一个命令。我试图编写一个程序来执行它,但它只执行一个命令,而不执行另一个
我的代码一:
import PyQt5.QtWidgets as pyqt
import sys
ongoing = False
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.windows()
def windows(self):
w = pyqt.QWidget()
layout = pyqt.QGridLayout()
self.setLayout(layout)
button = pyqt.QPushButton('click me', w)
layout.addWidget(button)
if not ongoing:
button.clicked.connect(click_one)
else:
button.clicked.connect(click_two)
self.show()
w.show()
def click_one():
global ongoing
print('one')
ongoing = not ongoing
def click_two():
global ongoing
print('two')
ongoing = not ongoing
if __name__ == '__main__':
app = pyqt.QApplication(sys.argv)
x = Stuff()
app.exec_()
我应该怎么做才能解决这个问题?
由于 class 初始化时 ongoing
的值为 False,按钮的点击信号连接到 click_one()
。将按钮连接到一个初始插槽,然后根据 ongoing
.
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.windows()
def windows(self):
w = pyqt.QWidget()
layout = pyqt.QGridLayout()
self.setLayout(layout)
button = pyqt.QPushButton('click me', w)
layout.addWidget(button)
button.clicked.connect(on_click)
self.show()
w.show()
def on_click():
global ongoing
if not ongoing:
click_one()
else:
click_two()
我建议用属于 class 的函数和 ongoing
变量重写代码。分配给变量 w
的 QWidget 似乎是多余的,因为 QPushButton 然后被添加到 class 的布局中,所以它的父级无论如何都会改变。
class Stuff(pyqt.QWidget):
def __init__(self):
super().__init__()
self.ongoing = False
self.windows()
def windows(self):
layout = pyqt.QGridLayout(self)
button = pyqt.QPushButton('click me')
layout.addWidget(button)
button.clicked.connect(self.on_click)
self.show()
def on_click(self):
self.click_one() if not self.ongoing else self.click_two()
self.ongoing = not self.ongoing
def click_one(self):
print('one')
def click_two(self):
print('two')
您可能也有兴趣使用 checkable button。