作为一个相当新的Python和Qt程序员,这是我的第一个问题。我试图找到一种解决方案,但运气不佳(我可能只是错误地提出了这个问题)。
我产生了以下代码,希望可以帮助证明我的问题:
import sys
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.resize(410, 131)
self.setWindowTitle("Test")
self.centralWidget = QtWidgets.QWidget(self)
self.setCentralWidget(self.centralWidget)
self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)
self.centralWidget.setLayout(self.gridLayout)
self.mainButton = QtWidgets.QPushButton("Main", self)
self.altButton = QtWidgets.QPushButton("Alt", self)
self.radioButton = QtWidgets.QRadioButton("Main/Alt", self)
self.label = QtWidgets.QLabel("Label", self)
self.gridLayout.addWidget(self.mainButton, 0, 0)
self.gridLayout.addWidget(self.altButton, 0, 1)
self.gridLayout.addWidget(self.label, 0, 3)
self.gridLayout.addWidget(self.radioButton, 1, 0)
def setMain():
print("Main is chosen")
ui.label.setText("Main is chosen")
# ui.label.update()
def setAlt():
print("Alt is chosen")
ui.label.setText("Alt is chosen")
# ui.label.update()
def setToggle(btn):
if btn.isChecked():
setMain()
else:
setAlt()
app = QtWidgets.QApplication(sys.argv)
ui = MainWindow()
ui.mainButton.pressed.connect(lambda: setMain())
ui.altButton.pressed.connect(lambda: setAlt())
ui.radioButton.toggled.connect(lambda: setToggle(ui.radioButton))
ui.show()
sys.exit(app.exec_())
如果我运行上面的代码,则“ Main”和“ Alt”按钮不会像我期望的那样更新QLabel小部件。但是,QRadioButton似乎可以正常工作。
我发现,如果在两次按键之间调整窗口大小,标签会重新绘制自身。如果我使用QButton.clicked()信号而不是QButton.pressed()信号,则标签将在大约80%的时间内更新。正如您希望在控制台中看到的那样,两种类型的信号/插槽均一致地调用这些函数,这似乎是受影响的QLabel小部件的重画。
我看过的所有地方都建议这样做,所以我有些困惑。我在Mac OSX 10.14.2的PyCharm IDE中运行Python 3.5。任何帮助解释这种行为以及如何克服它的帮助将不胜感激。预先非常感谢。