当我使用PySide时,我总是使用Python交互模式。这安全吗?我想知道 PySide 在 Python 交互模式下如何运作。使用 PySide 时,Python 交互模式
和从 shell 调用“python example.py”运行
有什么区别。
P.S.不要犹豫从语法点修改这个问题,因为我是英语学习者。同样从技术角度来看。
最佳答案
安全是什么意思?如果您指的是它所管理的数据的安全性,那么它并不比正在运行的代码以及用户与程序的交互方式比正常运行程序更安全或更危险,但交互式 shell 可以直接访问整个程序状态。具有 Python 语言的全部功能。然而,由于 Qt 的结构,这不能轻易被利用*,但您仍然可以使用它来生成窗口。
无论如何,这是一个例子:
>>> from PySide import QtCore, QtGui
>>> class MainWindow(QtGui.QMainWindow):
... def __init__(self):
... super(MainWindow, self).__init__()
... self.setObjectName("MainWindow")
... self.resize(800, 600)
...
>>> app = QtGui.QApplication([])
>>> mw = MainWindow()
>>> exit = QtGui.QAction('&Exit', mw)
>>> exit.triggered.connect(mw.close)
True
>>> menubar = mw.menuBar()
>>> filemenu = menubar.addMenu('&File')
>>> filemenu.addAction(exit)
>>> mw.show()
>>> app.exec_()
交互式 shell 将停止响应,控制权将转移到窗口。单击文件然后退出将关闭窗口,结果如下:
0
>>>
当然,您可以按顺序重复调用mw.show
和app.exec_
。如果在调用 app.exec_ 之前窗口被隐藏,您可能无法从 Qt 事件循环中重新获得控制权,因此需要强制退出,这可能是您所说的潜在危险 - 但考虑到我们只是在玩弄它,所以不应该这样做一个问题。我们也可以尝试做点别的事情
>>> def hello():
... print 'Hello world'
...
>>> helloaction = QtGui.QAction('&Hello', mw)
>>> helloaction.triggered.connect(hello)
True
>>> filemenu.addAction(helloaction)
>>> mw.show()
>>> app.exec_()
您将注意到 Exit
操作下方有一个新操作,选择该操作会将“Hello World”打印到您的终端中。
* 当然,您可以在使用 code.interact
启动应用程序后生成交互式 python shell。在单独的线程中运行,但这是您必须阅读的另一件事。
关于python - 在Python交互模式下使用Pyside安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441839/