如何在Qt Designer中定义信号/槽函数

9

我正在尝试将一个按钮的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中直接连接信号和插槽,但我该如何在代码中准备并访问这些连接?附带问题:上面的代码有效,但主窗口显示的大小不正确。我该如何确保它以正确的大小出现?我应该使用最小高度/宽度约束来实现吗?
2个回答

12

使用信号和槽编辑模式直接将预定义的Qt信号连接到预定义的Qt槽。

例如,在简单对话框上的“关闭”按钮上,您只需从按钮拖动连接到对话框,选择clicked()信号和reject()槽,点击“确定”,就没有更多要做的了。

对于您想自定义的信号和/或槽,您无需事先在设计师中进行任何"准备工作"。所有操作都应在您的代码中完成。

您的示例已经很好地演示了这一点,但连接可以更简单、更清晰地完成,像这样:

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

关于你的主窗口尺寸出现“错误”的问题:从你展示的代码中很难判断,但可能是因为你在加载的部件中没有设置布局。

顺便问一下:你使用QUiLoader有特殊原因吗?使用pyuic4编译Python模块更加灵活,并且你可以从生成的代码中学到很多东西。

编辑

对我来说,在主窗体上设置布局可以解决你所说的缩放问题。

如果你不知道如何操作,请在设计器中右键单击主窗体的空白部分,然后从菜单中选择布局/网格布局(工具栏上也有一个按钮)。

完成这些步骤后,调整窗体大小将自动拉伸以适应包含的部件。


谢谢,运行得很好!关于大小调整问题,在Qt Designer中设置最小尺寸有所帮助。我想也许有一种编程方式可以确保主窗口的大小适合其中所有的小部件可见。 - Sven
关于 QUiLoader,选择它只是因为它比较简单,没有其他特别的原因。至于使用 pyuic4 的方法,我需要研究一下如何让 Eclipse/PyDev 自动启动 pyuic4 来处理 .ui 文件。 - Sven
@Sven。请看我关于调整大小的更新答案:我相当确定这是一个布局问题。 - ekhumoro
再次感谢,这解决了我的调整大小问题。我开始喜欢pyQt了! - Sven

0

我编辑了.ui文件:

  1. 关闭QT Designer
  2. 在槽/信号区域编辑.ui文件
  3. 运行它

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接