我正在尝试为我在这里的一些人的帮助下编写的一个小程序制作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
据我了解,您正在使用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_())
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)
导入以下内容:
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)