PyQt5弹窗询问,确认就关闭串口,取消就每间隔10秒再次弹窗询问,直到确认退出
时间: 2024-10-10 11:05:41 浏览: 11
在PyQt5中,你可以使用`QMessageBox`创建一个弹窗来进行确认/取消操作,同时结合`serial`库来控制串口。以下是一个简单的示例代码,展示了如何实现这个功能:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMessageBox, QMainWindow
import serial
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# 初始化串口连接(假设你的串口号是COM1)
self.serial_port = serial.Serial('COM1', baudrate=9600)
self.exit_loop = False
def on_close(self):
if not self.exit_loop:
reply = QMessageBox.question(self, 'Exit Confirmation',
"Are you sure you want to close the port?",
QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
self.serial_port.close()
self.exit()
else:
self.exit_loop = True
self每隔十秒询问()
def 每隔十秒询问(self):
self.exit_loop = True
QTimer.singleShot(10000, self每隔十秒询问)
if not self.serial_port.is_open:
self.exit()
else:
QMessageBox.information(self, 'Connection Status',
"Please confirm closing the port", QMessageBox.Ok)
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
```
在这个例子中:
1. `on_close`方法会在窗口关闭时被调用,显示确认对话框。
2. 如果用户选择"是",则关闭串口并退出程序;否则,设置一个循环每隔10秒再次询问是否关闭串口。
3. `每隔十秒询问`方法中,我们使用了`QTimer`来定期触发回调,直到串口被关闭。