аргумент 1 имеет неожиданный тип 'Ui_mainWindow' - PullRequest
4 голосов
/ 17 февраля 2012

Я пытаюсь создать графический интерфейс для небольшой программы, которую я написал с помощью некоторых людей, в любом случае, я сделал графический интерфейс в PyQt, и это выглядит нормально. Я добавил кнопку с именем 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):

Не понимаю, почему я получаю ошибку, у кого-нибудь есть идеи?

Вот ссылка на весь графический интерфейс: http://pastebin.com/BWCcXxUW

Ответы [ 2 ]

8 голосов
/ 17 февраля 2012

Как я понимаю, вы используете Ui_mainWindow, сгенерированный из .ui файла.Как видите, Ui_mainWindow это просто класс python, который содержит виджеты.getOpenFileName получает QWidget экземпляр в качестве первого параметра.Поэтому вам нужно создать подкласс QWidget или QMainWindow и определить методы в этом классе.

Код будет выглядеть следующим образом:

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)

2 голосов
/ 04 апреля 2018

импортируйте следующее:

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

В классе Ui_MainWindow (object) замените объект на QWidget:

Ui_MainWindow(QWidget)
...