【问题标题】:How to implement a signal/slot defined in Qt Designer如何实现 Qt Designer 中定义的信号/槽
【发布时间】:2012-02-03 11:28:28
【问题描述】:

我正在尝试将按钮的 click() 信号连接到我自己的函数。该按钮位于我使用 QT Designer 创建的小部件中。我像这样使用 QUiLoader 加载 .ui 文件:

class MyWidget(QtGui.QMainWindow):
    def __init__(self, *args):  
        QtGui.QMainWindow.__init__(self, *args)

        loader = QtUiTools.QUiLoader()
        file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui")
        file.open(QtCore.QFile.ReadOnly)
        self.myWidget = loader.load(file, self)
        file.close()

        self.setCentralWidget(self.myWidget)

        btn = self.myWidget.findChild(QtGui.QPushButton, "HelloWorldButton")
        btn.clicked.connect(self.slot1)        

    def slot1(self):
        print "Received"

这是连接按钮 clicked() 信号的正确方法吗?我看到我可以直接在 Qt Designer 中连接信号和插槽,但是我如何准备并在代码中连接这些连接? 附带问题:上面的代码有效,但主窗口显示的大小错误。如何确保它以正确的尺寸显示?我应该用最小的高度/宽度限制吗?

【问题讨论】:

    标签: python pyqt pyside signals-slots qt-designer


    【解决方案1】:

    使用Signals and Slots Editing Mode 将预定义的 Qt 信号直接连接到预定义的 Qt 插槽。

    所以对于简单对话框上的“关闭”按钮,您只需将连接从按钮拖到对话框中,选择clicked() 信号和reject() 插槽,单击“确定”,就什么都没有了更多的事情要做。

    对于您想要自己定义的信号和/或插槽,您无需事先在 Designer 中“准备”任何内容。一切都应该在您自己的代码中完成。

    您的示例已经很好地证明了这一点,但可以更简单、更干净地完成连接,如下所示:

    self.myWidget.HelloWorldButton.clicked.connect(self.slot1)
    

    至于您的主窗口“大小错误”:从您显示的代码中很难分辨,但这可能是因为您没有在正在加载的小部件中设置布局。

    顺便说一句:您使用QUiLoader 是否有特定原因?使用pyuic4 编译python 模块更加灵活,你可以从生成的代码中学到很多东西。

    编辑

    对我来说,在主窗体上设置布局可以解决您所说的调整大小问题。

    如果您不知道如何操作:在 Designer 中,右键单击主窗体的空白部分,然后从菜单中选择 Layout/Layout in a Grid(工具栏上还有一个按钮)。

    完成此操作后,调整表单大小将自动拉伸它以适应包含的小部件。

    【讨论】:

    • 谢谢,效果很好!重新调整大小问题,在 Qt Designer 中设置最小大小有帮助。我想也许有一种编程方式来确保主窗口的大小,以便它里面的所有小部件都是可见的。
    • Re QUiLoader,没有什么特别的原因,就是简单而已。对于 pyuic4 方法,我将不得不研究如何让 Eclipse/PyDev 为 .ui 文件自动启动 pyuic4
    • @Sven。请参阅我关于调整大小的更新答案:我很确定这是一个布局问题。
    • 再次感谢,这解决了我调整大小的麻烦。我开始喜欢 pyQt!
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2017-02-23
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多