python-3.x - PySide2 如何取消分配当前布局并将新布局分配给窗口小部件?.count() 给出属性错误?
问题描述
我是 PySide2 的新手,昨天开始使用它。我正在根据我在网上找到的 API 文档和信息自学。我正在尝试用它制作一个小应用程序来自学。我对应用程序的想法是使用类似视图的模型,当您按下某些按钮时,我会删除窗口上的当前布局并为您呈现一个全新的布局。这促进了模块化,因为每个布局不会相互依赖,而是完全独立的。(应用程序的每个部分都大不相同,需要删除几乎所有小部件)。
但是,每当我搜索如何删除布局或删除其所有小部件时,我总是会遇到这样的一段代码(这实际上来自 6 个月前提出的问题):
def clearLayout(self, layout):
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.deleteLater()
else:
self.clearLayout(item.layout())
然而,当我实现类似的东西时,即使是完全相同的函数,然后使用它调用它,self.clearLayout(self.layout)
我也会收到以下错误:
File "GUI.py", line 45, in home
self.clearLayout(self.layout)
File "GUI.py", line 16, in clearLayout
while layout.count():
AttributeError: 'builtin_function_or_method' object has no attribute 'count'
我假设我可能忘记导入一些重要的东西,但我似乎无法找到什么。这是我的进口清单。
import sys
from PySide2.QtWidgets import QApplication, QLabel, QLineEdit, QWidget
from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QLayout
pip install PySide2
我还使用命令行(Anaconda)安装了 PySide2 。我必须做其他事情吗?
非常感谢,抱歉帖子这么长,只是想从一开始就给你完整的信息:)
编辑:进一步的测试让我意识到我不能使用 QLayout 的任何虚函数或其子类。显然我必须在代码中自己实现它们。我相信它可能是这样的。我不知道如何实现它们。我会继续努力。
编辑 2:有些人要求提供一个可重现的示例,所以这里的代码不起作用。
import sys
from PySide2.QtWidgets import QApplication, QLabel, QLineEdit, QWidget
from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QLayout
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Program")
self.setGeometry(300, 300, 300, 300)
self.start()
def clearLayout(self, layout):
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.deleteLater()
else:
self.clearLayout(item.layout())
def start(self):
self.startbutton = QPushButton("Start App")
layout = QVBoxLayout()
layout.addWidget(self.startbutton)
self.setLayout(layout)
self.startbutton.clicked.connect(self.home)
def home(self):
self.clearLayout(self.layout)
self.message=QLabel("Welcome to homepage")
layout=QVBoxLayout()
layout.addWidget(self.message)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window=Window()
window.show()
sys.exit(app.exec_())
解决方案
推荐阅读
- c# - unity OnMouseUp 和 OnCollisionEnter 同时进行
- angular - Angular & Contentful:无法在空间内创建资产
- r - 使用向量过滤包含在数据框中的列表。R工作室
- javascript - 放入 p.text 函数时使变量变为粗体
- autotools - OpenWRT 在编译时寻找 staging_dir 中的文件
- c# - 如何在与实体框架连接并使用 dapper 的 asp.net mvc 中插入和检索地理数据?
- mysql - MySql 将 id 定义的数据与来自不同行的数据匹配
- powershell - 如何使用开关?
- c# - C# - WPF 自定义用户控件多次相同的视图
- go - 测量每个流的 gRPC 带宽