Python 简单的PyQT5程序昨天运行良好,不再显示文件对话框
Spyder 3.3.2 Python 2.7.15 64位| Qt 5.6.2 | PyQt5 5.6 | Windows 10 伊皮顿 下面的代码昨天起作用,打开一个文件对话框,允许我选择一个文件。它停止工作了,我根本没有任何对话Python 简单的PyQT5程序昨天运行良好,不再显示文件对话框,python,python-2.7,pyqt5,Python,Python 2.7,Pyqt5,Spyder 3.3.2 Python 2.7.15 64位| Qt 5.6.2 | PyQt5 5.6 | Windows 10 伊皮顿 下面的代码昨天起作用,打开一个文件对话框,允许我选择一个文件。它停止工作了,我根本没有任何对话 from PyQt5.QtWidgets import QFileDialog # note this is correct code as I use it filename=QFileDialog.getOpenFileName(None,"Open Data
from PyQt5.QtWidgets import QFileDialog # note this is correct code as I use it
filename=QFileDialog.getOpenFileName(None,"Open Data File",'.',"*.xlsx)")
print filename
其他使用PyQt5的简单示例昨天已经不起作用了。我尝试过各种方法来解决这个问题,但都没有取得任何进展。我已经重新启动,重置Spyder,更新conda,在调试中运行,等等。决不是python专家
这里是控制台日志,请注意,如果我只执行import语句本身,那么我会在dir()中看到QFileDialog。如果我执行所有3行,QFileDialog不会出现。如果在控制台窗口中执行QFileDialog,则不会发生任何事情
> %reset
>
> Once deleted, variables cannot be recovered. Proceed (y/[n])? y
>
> dir() Out[3]: ['In', 'Out', '__builtin__', '__builtins__',
> '__name__', '_dh', '_i', '_i3', '_ih', '_ii', '_iii', '_oh',
> '_sh', 'exit', 'get_ipython', 'quit']
>
> runfile('C:/Projects/GenIICoastalModel/Python/NonCHS/NonCHS/TestReadFile.py',
> wdir='C:/Projects/GenIICoastalModel/Python/NonCHS/NonCHS')
>
> dir() Out[1]: ['In', 'Out', '_', '__', '___', '__builtin__',
> '__builtins__', '__doc__', '__name__', '__package__', '_dh',
> '_i', '_i1', '_ih', '_ii', '_iii', '_oh', '_sh', 'exit',
> 'get_ipython', 'quit']
>
> '
我不知道为什么您的代码现在的行为与过去不同。但是,PyQt代码可以在不显示任何python错误回溯的情况下崩溃的原因已经得到了简洁的解释。引述: 关于pyqt,首先要了解的是,它只是一个 围绕Qt C++库的包装器,所以几乎所有的PyQT相关 在您的应用程序中,作为C++包装器(松散定义)执行。 第二,了解pyqt是事件驱动的,因此具有 在脚本执行过程中运行的自己的事件循环 (据我所知)在它自己的执行线程中运行 因此,在 qt信号/事件触发的插槽(按钮点击、按键等) 将在C++域中通过QT事件循环进行处理,并且因为 这样,在所述插槽中提出的任何异常都将基本上被排除在外 python解释器的作用域,因此不会在 插槽的范围。因此,在本质上,虽然可能会提出一个例外 在qt插槽的上下文中,一旦它离开该插槽的范围, 这个例外基本上被删除了 当我在Spyder中执行您的示例代码时,我也遇到了没有任何错误信息的崩溃。但是,当我在Windows命令提示符内的IPython控制台中执行示例代码时,将显示以下简短错误消息: QWidget:必须在QWidget之前构造QApplication 显然,问题在于没有显式构造对象。尝试一下:
from __future__ import print_function # not needed in python 3
from PyQt5 import QtWidgets
class FileDialog(QtWidgets.QFileDialog):
def __init__(self, parent=None):
super(FileDialog, self).__init__(parent) # can be simplified to `super().__init__(parent)` in python 3
self.fileSelected.connect(lambda x: print(x))
def run_app():
app = QtWidgets.QApplication([])
file_dialog = FileDialog()
file_dialog.show()
app.exec_()
if __name__ == '__main__':
run_app()
我不知道为什么您的代码现在的行为与过去不同。但是,PyQt代码可以在不显示任何python错误回溯的情况下崩溃的原因已经得到了简洁的解释。引述: 关于pyqt,首先要了解的是,它只是一个 围绕Qt C++库的包装器,所以几乎所有的PyQT相关 在您的应用程序中,作为C++包装器(松散定义)执行。 第二,了解pyqt是事件驱动的,因此具有 在脚本执行过程中运行的自己的事件循环 (据我所知)在它自己的执行线程中运行 因此,在 qt信号/事件触发的插槽(按钮点击、按键等) 将在C++域中通过QT事件循环进行处理,并且因为 这样,在所述插槽中提出的任何异常都将基本上被排除在外 python解释器的作用域,因此不会在 插槽的范围。因此,在本质上,虽然可能会提出一个例外 在qt插槽的上下文中,一旦它离开该插槽的范围, 这个例外基本上被删除了 当我在Spyder中执行您的示例代码时,我也遇到了没有任何错误信息的崩溃。但是,当我在Windows命令提示符内的IPython控制台中执行示例代码时,将显示以下简短错误消息: QWidget:必须在QWidget之前构造QApplication 显然,问题在于没有显式构造对象。尝试一下:
from __future__ import print_function # not needed in python 3
from PyQt5 import QtWidgets
class FileDialog(QtWidgets.QFileDialog):
def __init__(self, parent=None):
super(FileDialog, self).__init__(parent) # can be simplified to `super().__init__(parent)` in python 3
self.fileSelected.connect(lambda x: print(x))
def run_app():
app = QtWidgets.QApplication([])
file_dialog = FileDialog()
file_dialog.show()
app.exec_()
if __name__ == '__main__':
run_app()
将
PyQt.qtwidts
更改为PyQt5.qtwidts
对不起,我在帖子中输入错误,而不是在代码中。我将其更正为我实际尝试运行的内容,正如您所建议的,失败了。将PyQt.qtwidts
更改为PyQt5.qtwidts
抱歉,我在帖子中输入错误,而不是在代码中输入错误。我将其更正为我实际尝试运行的内容,正如您所建议的那样,失败了。感谢您的回答和对Python 2.7兼容性的编辑,现在可以工作了。感谢您的回答和对Python 2.7兼容性的编辑,现在可以工作了。