参数1具有意外类型'Ui_mainWindow'

时间:2012-02-17 14:32:15

标签: python pyqt pyqt4

我试图为我在这里的一些人的帮助下编写的小程序制作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

2 个答案:

答案 0 :(得分:8)

据我了解,您使用的是从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 by Example (Session 1)

的教程

答案 1 :(得分:2)

导入以下内容:

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

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

Ui_MainWindow(QWidget)