我知道这个问题很简单,但是无论如何我还是被卡住了。 有什么方法可以从继承的窗口小部件类中获取父布局窗口小部件名称?
我这里有一小段代码。因此,基本上我需要在现在打印“按一下按钮”的标签字段中打印self.super_main_layout
。
我有一个函数def print_foo应该可以做到。但是我不知道如何从继承的类中获取parent()
的名称。我需要准确地将此self.super_main_layout
打印在标签字段中。
我尝试使用self.parent()
方法,但是无效
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QApplication
class ButtonTest(QtWidgets.QWidget):
def __init__(self):
super(ButtonTest, self).__init__()
self.setFixedSize(300, 100)
self.layout = QtWidgets.QHBoxLayout()
self.setLayout(self.layout)
self.label = QtWidgets.QLabel("Push the Button")
self.button = QtWidgets.QPushButton("Button")
self.button.clicked.connect(self.print_foo)
self.layout.addWidget(self.label)
self.layout.addWidget(self.button)
def print_foo(self):
### ???????????
self.label.setText(str(self.parent().parent())) # ????
print(self.parent()) # ????
class MyApp(QtWidgets.QWidget):
def __init__(self):
super(MyApp, self).__init__()
self.W = ButtonTest()
self.setFixedSize(300,300)
self.super_main_layout = QtWidgets.QVBoxLayout()
self.setLayout(self.super_main_layout)
self.super_main_layout.addWidget(self.W)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyApp()
w.show()
sys.exit(app.exec_())
因此,当您按下Button时,它现在在标签字段中不打印任何内容。
但是我希望打印布局小部件self.super_main_layout
。
有什么办法吗?我现在正在做一个更大的项目。而且我只用按钮来编程继承的类,当按下按钮时,我必须获得不同的父名称。
非常感谢你。
ps。我对这个站点和编程都还很陌生,因此对任何错误深表歉意。预先感谢!
答案 0 :(得分:0)
由于变量的名称是相对的,例如,如果代码如下,就无法获得变量本身的名称:
# ...
self.setFixedSize(300,300)
self.super_main_layout = QtWidgets.QVBoxLayout()
foo_obj = self.super_main_layout
self.setLayout(foo_obj)
self.super_main_layout.addWidget(self.W)
布局的名称是:self.super_main_layout
或foo_obj
?由于两个变量都指向同一个对象。
您可以得到的是使用父对象的对象本身,然后是其布局:
def print_foo(self):
pw = self.parentWidget()
if pw is not None:
print(pw.layout())