python - PyQt4 文件名对话框

标签 python pyqt4 qt-designer qfiledialog qtgui

我有点新手,所以请客气;-)

我有一个 GUI,是我使用 PyQt4 和 python 2.6 制作的,带有一个工作文件对话框(即,您单击一个按钮,然后弹出一个窗口,允许您选择一个文件来加载/保存)。 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,其他一切工作正常,包括信号。知道我做错了什么!?

最佳答案

您的类应该(直接或间接)继承自 QtCore.QObject 以便能够处理信号。第一个继承自 QWidget,它完成了这项工作。

关于python - PyQt4 文件名对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362215/

相关文章:

python - Alembic:IntegrityError:添加不可为空的列时出现 "column contains null values"

python - 将 QMimeData 粘贴到另一个窗口的 QTextEdit

python-2.7 - 将子类信号连接到父类(super class)插槽

python - 在 PySide QWebPage 中出现不稳定的 "Invalid Signal signature"错误

python - pyqt 中的世界你好?

Qt 标准对话框示例 : Open file

python - datetime strptime - 设置格式以忽略字符串的结尾部分

python - Pandas:如何用另一个值替换 int 子字符串

python - 在扭曲的 python 中使用 stdio.StandardIO 进行键盘输入

python - PyQ5t : load Qt Designer into Python script (loadUiType): how to check error cause?