使用python、pyqt6写一个界面,有两个按键,两个按键里面有耗时操作,要求不卡界面
时间: 2024-01-20 18:02:31 浏览: 72
好的,以下是一个使用Python和PyQt6实现的示例程序,其中有两个按键,每个按键都会执行一个耗时操作,但不会卡界面:
```python
import sys
import time
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QGridLayout, QWidget
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.button1 = QPushButton('Button 1', self)
self.button1.clicked.connect(self.on_button1_clicked)
self.button2 = QPushButton('Button 2', self)
self.button2.clicked.connect(self.on_button2_clicked)
layout = QGridLayout()
layout.addWidget(self.button1, 0, 0)
layout.addWidget(self.button2, 0, 1)
self.setLayout(layout)
def on_button1_clicked(self):
self.long_running_task(5)
def on_button2_clicked(self):
self.long_running_task(10)
def long_running_task(self, duration):
start_time = time.monotonic()
while time.monotonic() - start_time < duration:
# 模拟耗时操作
time.sleep(0.1)
QApplication.processEvents()
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Non-blocking UI Demo')
self.setCentralWidget(MyWidget())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec())
```
该程序中,我们通过在长时间运行任务的过程中使用 `QApplication.processEvents()` 来让 QApplication 在等待耗时操作完成的同时处理其他事件,从而保证了UI界面的响应性。当然,在实际开发中,需要根据具体情况进行分析和优化。
阅读全文