2011-06-15 4 views
4

Я немного новичок так что вид ;-)PyQt4 диалог имя файла

Я имел графический интерфейс, который я сделал с помощью 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, чтобы преобразовать его в файл .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_()) 

Этот код производит графический интерфейс просто отлично и все остальное работает нормально, в том числе сигналов. Любая идея, что я делаю неправильно !?

ответ

2

Ваш класс должен наследовать (прямо или косвенно) из QtCore.QObject, чтобы иметь возможность обрабатывать сигналы. Первый наследует от QWidget, который выполняет эту работу.

+0

так что если я заменю (объект) на (qt.QWidget), он должен работать? или мне нужно добавить его как (object, qt.QWidget), я бы попробовал, но я далеко от своего компьютера! Спасибо за быстрый ответ btw – Ben

+0

Я пробовал, меняя объект на QWidget, отлично работал! – Ben

 Смежные вопросы

  • Нет связанных вопросов^_^