参数 1 具有意外类型“Ui_mainWindow”

新手上路,请多包涵

我正在尝试为我在这里的一些人的帮助下编写的小程序制作一个 GUI,无论如何,我在 PyQt 中制作了 GUI,它看起来不错。我添加了一个名为 dirButton 的按钮,上面写着“选择目录”

 self.dirButton = QtGui.QPushButton(self.buttonWidget)
self.dirButton.setGeometry(QtCore.QRect(0, 0, 91, 61))
self.dirButton.setObjectName(_fromUtf8("dirButton"))
self.dirButton.clicked.connect(self.browse)

在最后一行,当我点击它时,我让它调用 self.browse,它是:

 def browse(self):
    filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
    fname = open(filename)
    data = fname.read()
    self.textEdit.setText(data)
    fname.close()

但是,这是我得到的错误:

 Traceback (most recent call last):
File "C:\Users\Kevin\Desktop\python-tumblr-0.1\antearaGUI.py", line 88, in browse
filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
TypeError: QFileDialog.getOpenFileName(QWidget parent=None, QString caption=QString(),     QString directory=QString(), QString filter=QString(), QString selectedFilter=None, QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_mainWindow'

所以,ui_mainWindow 是我所有的 GUI 按钮和 GUI 本身存储的类。

 class Ui_mainWindow(object):

我不明白为什么我会收到错误消息,有人有任何想法吗?

这是整个 GUI 的 pastebin 链接:http: //pastebin.com/BWCcXxUW

原文由 Anteara 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 811
2 个回答

据我了解,您正在使用 Ui_mainWindow.ui 文件生成。如您所见 Ui_mainWindow 只是包含小部件的 python 类。 getOpenFileName 接收 QWidget 实例作为第一个参数。所以你需要 QWidgetQMainWindow 并在该类中定义方法。

代码将如下所示:

 import sys

from PyQt4 import QtCore, QtGui

from file_with_ui import Ui_MainWindow

class Main(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)

    def browse(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
        fname = open(filename)
        data = fname.read()
        self.textEdit.setText(data)
        fname.close()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())

或者,您可以将 ui 存储为实例属性:

 class Main(QtGui.QMainWindow):
    def __init__(self):
         QtGui.QMainWindow.__init__(self)
         self.ui=Ui_MainWindow()
         self.ui.setupUi(self)

并通过 self.ui 您的控件,例如: self.ui.textEdit.setText(data)

考虑阅读有关 pyuic 实例使用 PyQt 的教程(第 1 节)

原文由 reclosedev 发布,翻译遵循 CC BY-SA 3.0 许可协议

导入以下内容:

 import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui, QtCore

在类 Ui_MainWindow(object) 中,将 object 替换为 QWidget:

 Ui_MainWindow(QWidget)

原文由 mha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题