我正在尝试将按钮的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中连接信号和插槽,但是我如何准备并在代码中进行这样的连接? 附带问题:上面的代码有效,但主窗口显示错误的大小。如何确保尺寸合适?我应该用最小的高度/宽度约束来做这件事吗?
答案 0 :(得分:12)
使用Signals and Slots Editing Mode将预定义的Qt信号直接连接到预定义的Qt插槽。
因此,对于简单对话框中的“关闭”按钮,您只需将连接从按钮拖动到对话框,选择clicked()
信号和reject()
插槽,单击“确定”,然后没有什么可做的。
对于您想要自己定义的信号和/或插槽,您无需事先在Designer中“准备”任何内容。一切都应该在你自己的代码中完成。
你的例子已经很好地证明了这一点,但连接可以更加简单干净地完成,如下所示:
self.myWidget.HelloWorldButton.clicked.connect(self.slot1)
对于具有“错误大小”的主窗口:从您显示的代码中很难判断,但可能是因为您没有在正在加载的小部件中设置布局。
BTW:您使用QUiLoader
的具体原因是什么?使用pyuic4
编译python模块要灵活得多,您可以从生成的代码中学到很多东西。
修改强>
对我来说,在主窗体上设置布局可以解决您正在讨论的调整大小问题。
如果您不知道如何操作:在Designer中,右键单击主窗体的空白部分,然后从菜单中选择Layout/Layout in a Grid
(工具栏上还有一个按钮用于此)。
完成后,调整表单大小会自动拉伸它以适应包含的小部件。