PyQt4 app按钮不起作用

时间:2013-02-22 12:25:38

标签: python qt user-interface pyqt pyqt4

我正在尝试使用PyQt4设计器在Linux中设置应用程序,我正在努力将信号和插槽连接到它。现在我想要它做的就是将一个按钮clicked信号连接到一个自定义插槽saveEnergyScheme,它只是将“能量列表”打印到终端。

我已将我的应用的.ui代码翻译为pyuic4 -w sumcorr.ui > sumcorr_ui.py的python类。这在名为sumcorr_ui.py的{​​{1}}模块中创建了一个类:

SumCorr_ui

然后我将我的应用程序作为自定义小部件,并尝试将一个简单的信号插槽连接添加到按钮以显示它的工作原理:

class SumCorr_ui(QtGui.QMainWindow, Ui_SumCorr_ui):
    def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
        QtGui.QMainWindow.__init__(self, parent, f)

        self.setupUi(self)

当我点击名为from PyQt4 import QtGui, QtCore from sumcorr_ui import SumCorr_ui class SumCorr(SumCorr_ui): def __init__(self): SumCorr_ui.__init__(self) self.save_energies_button.clicked.connect(self.saveEnergyScheme) def saveEnergyScheme(self): print 'energyList' if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) mySumCorr = QtGui.QMainWindow() ui = SumCorr() ui.setupUi(mySumCorr) mySumCorr.show() sys.exit(app.exec_()) 的按钮时,我希望获得“能量列表”行,但没有任何反应。这可能是因为我没有将UI构建为小部件,而是作为主窗口?为什么不打印?

1 个答案:

答案 0 :(得分:2)

尝试添加ui.show(),您会看到您的代码正在创建两个不同的窗口,一个应该连接信号而一个不连接。那是因为您只显示了mySumCorr窗口,但只在其上调用了setupUi,但没有连接信号。

当您创建SumCorr实例时,您正在创建一个窗口并对其进行设置,然后,您无需进行ui.setupUi(mySumCorr)设置mySumCorr实例没有连接信号,你就会显示最后一个窗口。

我相信你的代码应该是这样的:

class SumCorr(QtGui.QMainWindow, Ui_SumCorr_ui):

    def __init__(self):
        SumCorr_ui.__init__(self)
        self.setupUi(self)

        self.save_energies_button.clicked.connect(self.saveEnergyScheme)

    def saveEnergyScheme(self):
        print 'energyList'

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mySumCorr = SumCorr()
    mySumCorr.show()
    sys.exit(app.exec_())

请注意,拥有SumCorr_ui类没有任何意义,因为Qt 是一个UI库,因此您只是引入了一个毫无价值的抽象层次。设计器文件已经为您提供了ui布局的抽象。