PyQt4 文件名对话框
我还是个新手,请多多包涵 ;-)
我之前用 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 Designer 制作了一个新的 GUI,并用 pyuic4 把它转换成了 .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 个回答
2
你的类应该直接或间接地从QtCore.QObject继承,这样才能处理信号。第一个类是从QWidget继承的,这样就可以做到这一点。