首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用loadUi()从ui文件加载界面后难以访问小部件

使用loadUi()从ui文件加载界面后难以访问小部件
EN

Stack Overflow用户
提问于 2012-12-05 14:30:00
回答 3查看 2.3K关注 0票数 1

我喜欢在PyQt中使用loadUi()方法加载QtDesigner接口文件的想法,因为我经常更改ui文件,而不想不断地将其转换为py文件。

但是,我很难理解如何在ui文件中访问不同的小部件和视图。下面显示了如何在ui中加载:

代码语言:javascript
复制
class MyClass(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super().__init__(parent)
        ui = uic.loadUi('MyUserInterface.ui',self)


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mainapplication = MyClass()
    mainapplication.show()
    app.exec_()

它显示得很好,但是我希望我能够访问GUI的元素,如下所示:

代码语言:javascript
复制
ui.sampleButton.makeDraggable()

我的问题是,如何访问GUI中的各种元素?

编辑1:我也尝试过不将uic.load调用分配给ui。如下所示,访问时,我可以通过使用Ui_MainWindow访问一些属性。但是,它会抛出一个错误

代码语言:javascript
复制
if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mainapplication = MyClass()
    mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True)
    mainapplication.show()
    app.exec_()

我得到的错误是...

代码语言:javascript
复制
Traceback (most recent call last):  File "C:\Users\Me\workspaces\com.samplesoftware.software\src\SoftwareView\MyClass.py", line 17, in <module>
  mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True)
  AttributeError: 'MyClass' object has no attribute 'Ui_MainWindow'

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2012-12-05 19:10:01

您不需要将其转换为.py文件,但您必须为它们命名才能访问它们,否则您需要知道sampleButton在ui文件中被调用了什么。

您可以简单地将sampleButton重命名为my_btn并访问它。

票数 0
EN

Stack Overflow用户

发布于 2012-12-06 03:46:49

loadUi函数将ui文件路径作为第一个参数,将base-instance作为第二个参数。

基本实例应该是与UI中的顶级小部件相同的Qt类。这是因为loadUi会将所有UI插入到基础实例中,并且可能需要调用它的一些方法。UI中定义的所有子小部件都将作为base-instance的属性结束。

因此,您应该在__init__中像这样调用loadUi

代码语言:javascript
复制
class MyClass(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(MyClass, self).__init__(parent)
        uic.loadUi('MyUserInterface.ui', self)

然后,您应该能够像这样访问graphicsView

代码语言:javascript
复制
        self.graphicsView.setAcceptDrops(True)
票数 0
EN

Stack Overflow用户

发布于 2012-12-06 13:18:45

我发现原因是因为我试图在运行app.exec_()之前调用Ui_MainWindow。在将Ui_MainWindow调用移动到末尾之后,它确实可以工作。我猜,事后看来确实有道理,MainWindow需要存在才能改变它的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13717556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档