我有Python 3.6.3和Spyder 3.2.4,它们都是昨天在安装了Windows 10的计算机上与Pyqt5一起安装的。我在Spyder中运行一些以前编写的Pyqt5代码时遇到了问题。以下代码显示了重现问题的最小代码段。
Spyder IPython控制台在运行代码时无限期挂起,永远不会打开窗口。 Ctrl-C不会停止执行,因此我必须杀死Spyder。如果我尝试逐行运行它,我会观察到“w.show()”执行但什么都不做,而“app.exec()”是挂起的行。相反,如果我从命令行控制台运行它,“w.show()”会出现一个非功能窗口,而“app.exec()”使窗口起作用。我在Spyder中运行的所有非pyqt代码执行得很好。
我更喜欢在Spyder中开发代码,因为从命令行运行代码通常需要30-60秒才能启动(大概来自导入)。
我可以在旧的(现在已损坏的)系统上运行Spyder中的代码,所以很明显这是我的安装或计算机的问题。但我不知道是什么。我已经尝试禁用我的病毒软件,使用pip更新所有相关软件包,从Anaconda提示重置Spyder,然后重新启动计算机。还有其他想法吗?
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if not QApplication.instance():
app = QApplication(sys.argv)
else:
app = QApplication.instance()
print("app started")
w = QWidget()
w.resize(250, 250)
w.move(200, 200)
w.setWindowTitle('Test window')
print('app setting')
w.show()
print("shown")
app.exec_()
#sys.exit(app.exec_())
print("exit")
在python中运行它时,需要修改如下。我已经修改了你的脚本,以便能够为你运行一些主要的PyQt约定。另请参阅我的内联注释,以了解您尝试使用打印行完成的任务。请享用!
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget
class MyMainUI(QtWidgets.QMainWindow):
def __init__(self, parent=None):
print ' Start Main'
super(MyMainUI, self).__init__(parent)
self.setWindowTitle('Test window')
self.resize(250, 250)
self.move(200, 200)
MySpidercodeHook()
def MySpiderCodeHook(self):
...link/run code...
if __name__ == '__main__':
app = QApplication(sys.argv) # no QApplication.instance() > returns -1 or error.
# Your setting up something that cannot yet be peeked
# into at this stage.
print("app started")
w = MyMainUI() # address your main GUI application
# not solely a widgetname..that is confusing...
x = 200
y = 200
# w.move(x, y) # normally this setting is done within the mainUI.
# See also PyQT conventions.
print 'app setting: moving window to position : %s' % ([x, y])
w.show()
print("shown")
app.exec_()
#sys.exit(app.exec_()) # if active then print "exit" is not shown..
# now is while using app.exec_()
#sys.exit(-1) # will returns you '-1' value as handle. Can be any integer.
print("exit")
sys.stdout.flush() # line used to print "printing text" when you're in an IDE
# like Komodo EDIT.