我试图为我在这里的一些人的帮助下编写的小程序制作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
答案 0 :(得分:8)
据我了解,您使用的是从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 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)