【问题标题】:how to access members from a class如何访问类中的成员
【发布时间】:2016-05-21 21:41:35
【问题描述】:

我使用 QtDesigner,它在转换为 .py 时将其代码放入类中。

我必须访问类之外的按钮、标签和文本框才能对它们进行操作。由于未解决的错误,我无法将我的函数放在类之上。我不想在类中添加我的函数.. 有很多东西而且很乱。所以我必须把我的功能放在课后。

这是 Qt Designer 转换为的过度简化的示例 Python 代码结构

class MyWindowUI():
    def setupUI(self):
        self.myButton1 = 'A'
        self.myButton2 = 'B'

    def stuff(self):
        self.myButton3 = 'A'
        self.myButton4 = 'B'
    test = "something"

myBtn = MyWindowUI()
print (myBtn.test)
print (myBtn.myButton4)

所以,myBtn.test 有效。它打印“某事”,但是 myBtn.myButton4 没有。说 MyWindowUI 实例没有属性 'myButton4.

如何从课堂外的“stuff”和“setupUI”获取信息?

【问题讨论】:

  • 请阅读有关此主题的 PyQt 文档:Using Qt Designer
  • 是的,我读到了。实际的 .ui 文件对话与文档中的对话不匹配。这就是我问的原因。转换器脚本不会使用 init 创建 py 脚本,尽管我指定了这样做的标志。不过,我已经结束了,转向其他解决方案。
  • 您误解了文档。显示的示例是您必须自己创建的脚本。 pyuic生成的模块应该导入到脚本中。
  • ohhhhh,我明白了.. 现在说得通了。 :) 谢谢

标签: python pyqt qt-designer pyuic


【解决方案1】:

由于您没有调用方法,因此您的代码永远不会进入这些代码块来创建变量。

一种方法是在__init__ 中调用它们,但您可以在创建类实例后在任何您喜欢的地方调用它们。请确保,您的代码通过该行。

class MyWindowUI():
    def __init__(self):
        self.setupUI()
        self.stuff()

    def setupUI(self):
        self.myButton1 = 'A'
        self.myButton2 = 'B'

    def stuff(self):
        self.myButton3 = 'A'
        self.myButton4 = 'B'
    test = "something"

myBtn = MyWindowUI()
#myBtn.setupUI()
#myBtn.stuff()
print (myBtn.test)
print (myBtn.myButton4)

【讨论】:

  • 我对 Qt 还很陌生。脚本生成器没有添加 init。我想如果我添加 init 它会破坏 gui。我早上回到课堂时会试试看。感谢您的快速回复。
  • 有没有不添加init的方法?
  • 在底部注释了两行。您可以删除 init 并取消注释这两行。
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 2019-01-27
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多