PyQt4 文件名对话框
Posted
技术标签:
【中文标题】PyQt4 文件名对话框【英文标题】:PyQt4 filename dialog 【发布时间】:2011-06-15 18:05:30 【问题描述】:我是个新手,所以请善待;-)
我有一个使用 PyQt4 和 python 2.6 制作的带有工作文件对话框的 GUI(即,您单击一个按钮并弹出一个窗口并允许您选择要加载/保存的文件)。 GUI 的代码大概有 2000 行,所以我将包括我认为重要的部分:
from PyQt4 import QtGui as qt
from PyQt4 import QtCore as qc
class NuclearMotion(qt.QWidget):
def __init__(self, parent=None):
super(NuclearMotion, self).__init__(parent)
file_button = qt.QPushButton("Use data from file")
mainLayout = qt.QGridLayout()
mainLayout.addWidget(file_button, 14, 8, 1, 2)
def choose_file():
file_name = qt.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")
self.connect(file_button, qc.SIGNAL("clicked()"), choose_file)
self.setLayout(mainLayout)
if __name__ == '__main__':
import sys
app = qt.QApplication(sys.argv)
NuclearMotionWidget = NuclearMotion()
NuclearMotionWidget.show()
sys.exit(app.exec_())
以上工作绝对没问题。我使用各种教程手动输入了它的所有代码。我现在使用 QT 设计器和 pyuic4 制作了一个新的 GUI,将其转换为 .py 文件。现在我无法使文件对话框工作。以下代码导致类型错误:
from PyQt4 import QtCore, QtGui
class Ui_mainLayout(object):
def setupUi(self, mainLayout):
mainLayout.setObjectName(_fromUtf8("mainLayout"))
mainLayout.resize(598, 335)
mainLayout.setTabPosition(QtGui.QTabWidget.North)
mainLayout.setTabShape(QtGui.QTabWidget.Rounded)
mainLayout.setElideMode(QtCore.Qt.ElideLeft)
self.basic_tab = QtGui.QWidget()
self.file_button = QtGui.QPushButton(self.basic_tab)
QtCore.QObject.connect(self.file_button, QtCore.SIGNAL("clicked()"), self.choose_file)
def choose_file(self):
file_name = QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mainLayout = QtGui.QTabWidget()
ui = Ui_mainLayout()
ui.setupUi(mainLayout)
mainLayout.show()
sys.exit(app.exec_())
这段代码可以很好地生成 GUI,其他一切正常,包括信号。知道我做错了什么!?
【问题讨论】:
【参考方案1】:您的类应该(直接或间接)从 QtCore.QObject 继承,以便能够处理信号。第一个继承自 QWidget,它完成了这项工作。
【讨论】:
所以如果我用 (qt.QWidget) 替换 (object) 它应该可以工作吗?还是我需要像(对象,qt.QWidget)一样添加它我会尝试它,但我远离我的电脑!感谢您的快速回复顺便说一句以上是关于PyQt4 文件名对话框的主要内容,如果未能解决你的问题,请参考以下文章