我正在使用Python 3和PyQt4以及:
我有头等舱:
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
中包含此功能:
def Fn_GetSpnBitsValue(self):
print (self.SpnBits.value())
self.BitNumber =self.SpnBits.value()
print(self.BitNumber)
return self.BitNumber
你可以看到我返回在这个类中创建的一个微调器的值 现在我想访问这个变量" self.BitNumber"从另一个班级。 在其他语言中,我只是简单地编写myValue = MainWindow.self.BitNumber,但它似乎在python中不那么容易,所以我看看类继承,所以我的第二个类继承了我的第一个...
我很想写这样写......:
class BitsWindow(QtGui.QWidget, MainWindow):
def __init__(self):
super(BitsWindow, self).__init__()
self.initUI2()
这对我来说是完美的感觉,我告诉我的第二堂课#34;看你从这门课继承,所以她知道的一切,你也知道#34;但我收到此消息错误:
class BitsWindow(QtGui.QWidget, MainWindow):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases QWidget, MainWindow
实际上,对我来说真的没什么感觉。通过在网络上进一步观察,我认为理解关键在于:
def __init__(self):
super(BitsWindow, self).__init__()
self.initUI2()
但我真的很难理解这个概念,尽管有很多教程和论坛答案,但我不确定这是做什么的。 (也许,可能,没有找到好的。)
非常感谢任何帮助;
非常感谢!
答案 0 :(得分:1)
问题是,BitsWindow
继承自QWidget
和MainWindow
,即使MainWindow
已经是QWidget
。
这破坏了python的策略,以确定哪个例如应使用哪种__init__
方法,QWidget
或MainWindow
中的方法:
MainWindow
定义告诉python在MainWindow
之前取QWidget
。
定义BitsWindow(QWidget, MainWindow)
后,您QWidget
优先于MainWindow
。
这两个策略相互冲突,这就是您收到错误的原因。
因此,只需从
更改您的班级定义即可class BitsWindow(QtGui.QWidget, MainWindow):
...
到
class BitsWindow(MainWindow):
...
FWIW,如果您真的想要,也可以保留冗余QWidget
继承,如果您更改顺序:
class BitsWindow(MainWindow, QWidget):
...
也应该有用。
修改强>
然而,继承实际上并不是你想要的。
您只需从MainWindow
:
main = MainWindow()
myValue = main.Fn_GetSpnBitsValue()
或
main.Fn_GetSpnBitsValue()
myValue = main.BitNumber