Qt设计器:自定义动作的自定义代码

2 投票
1 回答
3710 浏览
提问于 2025-04-16 22:12

我一直在找相关的信息,但到现在还没找到什么,除了关于Qt3和3.x版本的qt designer的旧文档。

我会给个例子,不是因为我不能提供代码,而是为了简单起见。

例子:你正在为你的应用程序设计一个图形界面(GUI)。你在界面里放了一些按钮,你希望这些按钮能执行一些可能已经写好的逻辑。

问题:你怎么把这些代码添加到按钮上,让按钮在被点击时能执行这些代码呢?

我不想用信号和槽来连接这些控件。我的想法是创建一个自定义的动作,在动作编辑器里把想要的按钮连接到这个动作上,希望能找到写这个动作代码的方法。我可以定义这个动作的名字、图标等等。但是我需要写它的逻辑/代码。

我看了一些文档,里面教你怎么创建一个C++头文件,但这似乎在新的Qt Designer版本(4.7.3)中已经不再适用了。我找到的关于我问题的其他资源都是在讲如何连接默认对象动作之间的信号。我再强调一次,这不是我需要的。

我的问题源于我不想编辑生成的.py文件。我觉得一定有办法设置一个文件(自定义代码、头文件等),来放置自定义动作的代码,但老实说,我到现在还没找到任何信息。

如果得到的答案是否定的(也就是说,“这样做是不可能的”),那么能给我一些“破解”代码的建议就好了。我真的不喜欢修改生成的.py文件,而且在我的代码里做一些像ui.callback这样的事情看起来也很糟糕。

祝好,

1 个回答

7

你不需要创建一个头文件或者修改 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_())

撰写回答