在 MacOs 下使用 pygt5 或 pyside2 的简单 QTimer 示例中导致这种奇怪的 UI 行为的原因是什么?
What is causing this weird UI behavior in simple QTimer example with pygt5 or pyside2 under MacOs?
我是 PyQt5 的新手。我从互联网上复制了一个简单的 QTimer 示例。它有点工作,但我得到了奇怪的工件,并且按钮 disable/enable 功能无法正常工作。我尝试了一些简单的更改,但问题仍然存在。我不知道这是对执行模型基本缺乏理解,还是 PyQt5 中的错误。我使用 PySide2 得到了完全相同的奇怪效果。这是代码:
import sys
from PySide2.QtWidgets import *
# from PyQt5.QtWidgets import *
from PySide2.QtCore import QTimer,QDateTime
# from PyQt5.QtCore import QTimer,QDateTime
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('QTimer example')
self.listFile=QListWidget()
self.label=QLabel('Label')
self.startBtn=QPushButton('Start')
self.endBtn=QPushButton('Stop')
widget = QWidget()
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
self.running = False
self.endBtn.setEnabled(False)
self.timer=QTimer()
self.timer.timeout.connect(self.showTime)
hlayout.addWidget(self.startBtn)
hlayout.addWidget(self.endBtn)
vlayout.addWidget(self.label)
vlayout.addLayout(hlayout)
self.startBtn.clicked.connect(self.start_timer)
self.endBtn.clicked.connect(self.endTimer)
widget.setLayout(vlayout)
self.setCentralWidget(widget)
def showTime(self):
time=QDateTime.currentDateTime()
timeDisplay=time.toString('yyyy-MM-dd hh:mm:ss dddd')
self.label.setText(timeDisplay)
def start_timer(self):
self.startBtn.setEnabled(False)
self.endBtn.setEnabled(True)
self.timer.start(1000)
def endTimer(self):
self.startBtn.setEnabled(True)
self.endBtn.setEnabled(False)
self.timer.stop()
if __name__ == '__main__':
app=QApplication(sys.argv)
form=Window()
form.show()
sys.exit(app.exec_())
我在网上看到一些关于类似问题的帖子仅限于 MacOS 并且谈论降级 PyQt5,这是我尝试 PySide2 的原因之一
除了按钮禁用功能无法完全发挥作用之外,我还看到了以下视觉效果:
以下是相关版本:
MacOS卡特琳娜,Python3.7,pyqt5 5.12.3,pyside2 5.13.2
事实证明,这是 PyQt5 中 Mac 特定错误的另一个示例,如此处所述:
在代码中添加重绘调用可以解决问题。
令人担忧的是,这个明显的错误还没有被修复,这让我想知道 MacOS 上的 pyq5 ....
我是 PyQt5 的新手。我从互联网上复制了一个简单的 QTimer 示例。它有点工作,但我得到了奇怪的工件,并且按钮 disable/enable 功能无法正常工作。我尝试了一些简单的更改,但问题仍然存在。我不知道这是对执行模型基本缺乏理解,还是 PyQt5 中的错误。我使用 PySide2 得到了完全相同的奇怪效果。这是代码:
import sys
from PySide2.QtWidgets import *
# from PyQt5.QtWidgets import *
from PySide2.QtCore import QTimer,QDateTime
# from PyQt5.QtCore import QTimer,QDateTime
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('QTimer example')
self.listFile=QListWidget()
self.label=QLabel('Label')
self.startBtn=QPushButton('Start')
self.endBtn=QPushButton('Stop')
widget = QWidget()
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
self.running = False
self.endBtn.setEnabled(False)
self.timer=QTimer()
self.timer.timeout.connect(self.showTime)
hlayout.addWidget(self.startBtn)
hlayout.addWidget(self.endBtn)
vlayout.addWidget(self.label)
vlayout.addLayout(hlayout)
self.startBtn.clicked.connect(self.start_timer)
self.endBtn.clicked.connect(self.endTimer)
widget.setLayout(vlayout)
self.setCentralWidget(widget)
def showTime(self):
time=QDateTime.currentDateTime()
timeDisplay=time.toString('yyyy-MM-dd hh:mm:ss dddd')
self.label.setText(timeDisplay)
def start_timer(self):
self.startBtn.setEnabled(False)
self.endBtn.setEnabled(True)
self.timer.start(1000)
def endTimer(self):
self.startBtn.setEnabled(True)
self.endBtn.setEnabled(False)
self.timer.stop()
if __name__ == '__main__':
app=QApplication(sys.argv)
form=Window()
form.show()
sys.exit(app.exec_())
我在网上看到一些关于类似问题的帖子仅限于 MacOS 并且谈论降级 PyQt5,这是我尝试 PySide2 的原因之一
除了按钮禁用功能无法完全发挥作用之外,我还看到了以下视觉效果:
以下是相关版本:
MacOS卡特琳娜,Python3.7,pyqt5 5.12.3,pyside2 5.13.2
事实证明,这是 PyQt5 中 Mac 特定错误的另一个示例,如此处所述:
在代码中添加重绘调用可以解决问题。
令人担忧的是,这个明显的错误还没有被修复,这让我想知道 MacOS 上的 pyq5 ....