我正在尝试使用PyQt4 designer在Linux中设置一个应用程序,但我正在努力将信号和插槽连接到它。现在,我要做的就是将一个按钮clicked信号连接到一个自定义插槽saveEnergyScheme,它只需将“能源列表”打印到终端即可。
我已经用pyuic4 -w sumcorr.ui > sumcorr_ui.py将我的应用程序的.ui代码翻译成了python类。这在sumcorr_ui.py模块中创建了一个名为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_())当我单击名为save_energies_button的按钮时,我希望看到“能源列表”行,但什么也没有发生。这是不是因为我没有将UI构建为一个小部件,而是作为一个主窗口?为什么不打印出来??
发布于 2013-02-22 20:44:36
尝试添加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布局的抽象。
https://stackoverflow.com/questions/15024213
复制相似问题