python - fileDialog 的 qt5 主窗口为空
问题描述
我正在尝试使用 Qt-Designer 创建一个简单的 FileDialog,但是当我运行它时我得到一个空页面。我在 Mac 上运行,并使用 python3.6。你能告诉我这段代码中我缺少什么吗:
UI 仅具有以下功能:
- 主窗口
- 顶部菜单中的“文件”字段
- “文件”字段中的“打开”选项
- 当用户单击选项并选择文件时,调用程序会打印文件名
以下是我运行的命令:
pyuic5 bug1_ui.ui -o bug1_ui.py -x
(or even: pyside2-uic bug1_ui.ui > bug1_ui.py)
python bug1_demo.py
当我运行这个程序时,我得到的是一个缺少“文件”字段的空窗口:
我附上了 bug1_ui.ui(从 QT-designer 保存的 UI xml)、bug1_ui.py(由 pyuic5 生成)和 bug1_demo.py(调用程序)的代码。
bug1_ui.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>524</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
</widget>
<addaction name="menuFile"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionOpen">
<property name="text">
<string>Open</string>
</property>
</action>
<action name="actionSave">
<property name="text">
<string>Save</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
bug1_ui.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 524)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionSave = QtWidgets.QAction(MainWindow)
self.actionSave.setObjectName("actionSave")
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionSave)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionSave.setText(_translate("MainWindow", "Save"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
bug1_demo.py:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, QFileDialog
from bug1_ui import *
class MyForm(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.actionOpen.triggered.connect(self.openFileDialog)
self.show()
def openFileDialog(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', '/Users')
if fname[0]:
print('file={}'.format(fname[0]))
if __name__=="__main__":
app = QApplication(sys.argv)
w = MyForm()
w.show()
sys.exit(app.exec_())
解决方案
推荐阅读
- python-3.x - Python:在 Google Colab 中使用 Selenium 自动将数据输入到 Google Drive
- java - Apache NIFI 自定义处理器给出错误“找不到合适的驱动程序”
- python - 从python的fasta文件之间找到主题
- hybris - 当我在 Hybris 中本地化枚举类型时,如何解决 java.lang.IllegalStateException?
- python - 解码ASCII时,是否应该故意省略奇偶校验位?
- class - UML 类图中信号的正确设计是什么?
- xcode - UICollectionView 的单元格中的按钮不起作用
- python - tkinter 文本插入 wordstart 的问题
- php - 创建自定义用户电子邮件
- c - 如何编译 C 程序,使二进制文件仅在不同的返回值上有所不同?