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

Ant*_*ara 4 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)
Run Code Online (Sandbox Code Playgroud)

在底线,我点击它时调用self.browse,这是:

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

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

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'
Run Code Online (Sandbox Code Playgroud)

因此,ui_mainWindow是我的所有GUI按钮和GUI本身都存储在其中的类.

class Ui_mainWindow(object):
Run Code Online (Sandbox Code Playgroud)

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

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

rec*_*dev 8

据我了解,您正在使用Ui_mainWindow.ui文件生成.正如您所看到Ui_mainWindow的只是包含小部件的python类.getOpenFileNameQWidget实例作为第一个参数接收.所以你需要子类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_())
Run Code Online (Sandbox Code Playgroud)

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

class Main(QtGui.QMainWindow):
    def __init__(self):
         QtGui.QMainWindow.__init__(self)
         self.ui=Ui_MainWindow()
         self.ui.setupUi(self)
Run Code Online (Sandbox Code Playgroud)

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

考虑通过示例阅读有关pyuic使用PyQt的教程(会话1)


Moh*_*asi 8

导入以下内容:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui, QtCore
Run Code Online (Sandbox Code Playgroud)

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

Ui_MainWindow(QWidget)
Run Code Online (Sandbox Code Playgroud)