Qt设计师:自定义操作的自定义代码

时间:2011-07-25 03:29:23

标签: python pyqt designer signals-slots

我一直在环顾四周,除了qt设计版3.x版的Qt3旧文档外,我还没有找到任何东西。

我会留下一个例子,不是说我不能给代码,因为我的项目是GPL,但为了简单起见。

示例: 您正在为应用程序设计GUI。您在GUI中插入了一些按钮,并且您希望这些按钮使用可能已写入的逻辑执行某些操作。

问题: 如何添加或设置此代码的方式是,选中该按钮时会触发该代码?

我不想将小部件与信号/插槽连接。我的方法是在动作编辑器中创建一个自定义动作,并将所需按钮连接到该动作,希望找到一种方法来为该动作编写代码。我可以定义它的名称,它的图标(?),等等。但我需要编写它的逻辑/代码。

我阅读了一些指示您创建C ++头文件的documentation,但对于新的Qt Designer版本(4.7.3)似乎已弃用。我发现的关于我的问题的另一个巨大资源都是关于在默认对象操作之间汇总信号。我再说一遍,这不是我需要/想要的。

我的问题源于我不想编辑生成的.py。我觉得它必须是一种用自定义动作代码设置文件(自定义代码,头文件等)的方法,但老实说,我还找不到任何东西。

如果回答是否定的(即“不可能这样做”),那么听一些“黑客”代码的建议会很高兴。我真的不喜欢修改生成的.py,在我的代码中执行类似:ui.callback的操作似乎很难看。

此致

1 个答案:

答案 0 :(得分:6)

您无需创建头文件或修改pyuic生成的文件。假设您的操作对象名为myaction,并且您希望在切换时发出myaction_slot信号:

import sys
from PyQt4 import QtCore, QtGui

# import pyuic generated user interface file
from ui_mainwindow import Ui_MainWindow

class MyMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.setupUi(self)
        # connect myaction_logic to myaction.toggled signal
        self.myaction.toggled.connect(self.myaction_slot)

    def myaction_slot(self):
        pass # do something here

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyMainWindow()
    myapp.show()
    sys.exit(app.exec_())