我正在尝试将按钮的
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 中连接信号和插槽,但是如何在代码中准备并进行此类连接?
附带问题:上面的代码可以工作,但主窗口显示的大小错误。如何确保它以正确的尺寸显示?我应该在最小高度/宽度限制的情况下执行此操作吗?
使用信号和槽编辑模式将预定义的 Qt 信号直接连接到预定义的 Qt 槽。
因此,对于简单对话框上的“关闭”按钮,您只需将连接从按钮拖到对话框中,选择
clicked()
信号和 reject()
插槽,单击“确定”,就没有什么了做。
对于您想要自己定义的信号和/或槽,您可以直接在代码中建立连接,也可以通过 Qt Designer 间接建立连接。您的示例已经很好地演示了第一个选项,但是连接可以更简单、更干净地完成,如下所示:
self.myWidget.HelloWorldButton.clicked.connect(self.slot1)
在 Qt Designer 中进行连接更加复杂。首先,您必须切换到信号/槽编辑模式(通过按F4或单击工具栏按钮),然后在发送器/接收器对象之间拖动连接。这将打开“配置连接”对话框,您可以在其中单击编辑按钮之一打开信号/槽编辑器,然后单击加号按钮手动添加您将在自己的代码中定义的任何信号/槽的签名(请参阅截图如下)。完成此操作后,您可以关闭第二个对话框并在第一个对话框中建立相关连接。但需要明确的是:这将不会在 Qt Designer 本身内创建任何信号和槽 - 它所做的只是允许您指定代码稍后可以使用的名称。此外,只能手动将信号/槽添加到 custom 类,例如顶级表单和 promoted widgets。
至于您的主窗口具有“错误的大小”:很难从您显示的代码中看出,但这可能是因为您没有在正在加载的小部件中设置布局。
顺便说一句:您使用
QUiLoader
有什么具体原因吗?使用 pyuic4
编译 python 模块更加灵活,您可以从生成的代码中学到很多东西。
编辑
对我来说,在主窗体上设置布局可以解决您所说的调整大小问题。
如果您不知道该怎么做:在 Designer 中,右键单击主窗体的空白部分,然后从菜单中选择
Layout/Layout in a Grid
(工具栏上还有一个用于此操作的按钮)。
完成此操作后,调整表单大小将自动拉伸它以适合包含的小部件。
我编辑了
.ui
文件:
.ui