如何解决GUI与终端的交互
是否可以使用PyQt5 GUI设置Python脚本,以便活动终端可以与其交互?
一个示例项目:
from PyQt5 import QtWidgets from PyQt5.QtCore import pyqtSlot
class Machine:
"""Simpel state machine"""
STATE_IDLE = 'idle'
STATE_OPERATION = 'operation'
def __init__(self):
self.state = self.STATE_IDLE
def get_state(self):
return self.state
def set_state(self,new_state):
self.state = new_state
@pyqtSlot() def on_click():
"""Callback for the PyQt button"""
print('State:',machine.get_state())
if __name__ == '__main__':
# Create machine instance
machine = Machine()
# Set up GUI
app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
label = QtWidgets.QLabel('Hello World!')
button = QtWidgets.QPushButton('Go')
button.clicked.connect(on_click)
layout.addWidget(label)
layout.addWidget(button)
window.setLayout(layout)
window.show()
code = app.exec()
exit(code)
我想运行此脚本,然后能够从同一终端访问对象。像这样:
$ python main.py
State: idle [< I just pressed the GUI button]
>> machine.set_state(Machine.STATE_OPERATION)
State: operation [< I just pressed the GUI button again]
如果我这样运行它:
python -i main.py
命令行将挂起,直到关闭应用程序为止(毕竟.exec()
会执行此操作),但是随后我可以访问machine
。我可以使.exec()
不能这样挂吗?也许从单独的线程运行应用程序?
编辑:我发现您的Pyzo IDE允许您创建一个支持PyQt5的shell,该shell处理PyQt事件循环。因此,当将上面的脚本与这样的Pyzo shell一起使用时,我可以删除code = app.exec() exit(code)
,因为Pyzo将运行事件循环并使窗口保持活动状态。现在,我想在所有IDE中都做同样的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。