Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PyQt4 QStackedLayout交换布局错误

PyQt4 QStackedLayout交换布局错误
EN

Stack Overflow用户
提问于 2016-01-12 13:28:58
回答 2查看 570关注 0票数 0

我正在尝试让按钮在我用PyQt4制作的用户界面上工作。窗口会更改,但在我得到错误NameError之前,按钮只能工作一次:名称“UI2Window”未定义为。我不明白为什么我得到这个错误,因为代码工作良好的第一次。

帮助解决这个问题/找到一个更好的方式来切换布局是值得赞赏的。

下面是我的代码的简化版本。

UI1.py的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt4.QtCore import*
from PyQt4.QtGui import *
from UI2 import *

class UI1Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.Widget = self.CreateMainLayout()
        self.StackedLayout = QStackedLayout()
        self.StackedLayout.addWidget(self.Widget)
        self.MainWidget = QWidget()
        self.MainWidget.setLayout(self.StackedLayout)
        self.setCentralWidget(self.MainWidget)

    def OnClicked(self):
        Window = UI2Window()
        self.StackedLayout.addWidget(Window)
        self.StackedLayout.setCurrentIndex(1)

    def CreateMainLayout(self):
        Widget = QWidget()
        self.VLayout = QVBoxLayout()
        self.Button = QPushButton("UI2")
        self.Button.clicked.connect(self.OnClicked)
        self.VLayout.addWidget(self.Button)     
        Widget.setLayout(self.VLayout)
        return Widget

def main():
    App = QApplication(sys.argv)
    ProgramWindow = UI1Window()
    ProgramWindow.show()
    App.exec_()

if __name__ == "__main__":
    main()

UI“.py中的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt4.QtCore import*
from PyQt4.QtGui import *
from UI1 import *

class UI2Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.Widget = self.CreateMainLayout()
        self.StackedLayout = QStackedLayout()
        self.StackedLayout.addWidget(self.Widget)
        self.MainWidget = QWidget()
        self.MainWidget.setLayout(self.StackedLayout)
        self.setCentralWidget(self.MainWidget)

    def OnClicked(self):
        Window = UI1Window()
        self.StackedLayout.addWidget(Window)
        self.StackedLayout.setCurrentIndex(1)

    def CreateMainLayout(self):
        Widget = QWidget()
        self.VLayout = QVBoxLayout()
        self.Button = QPushButton("UI1")
        self.Button.clicked.connect(self.OnClicked)
        self.VLayout.addWidget(self.Button)     
        Widget.setLayout(self.VLayout)
        return Widget

def main():
    App = QApplication(sys.argv)
    ProgramWindow = UI2Window()
    ProgramWindow.show()
    App.exec_()

if __name__ == "__main__":
    main()
EN

回答 2

Stack Overflow用户

发布于 2016-01-13 04:47:34

你的目标是什么?您不能只创建两个布局,将它们添加到QStackedLayout中,然后在索引0和1之间切换吗?

诸如此类的东西来保存你的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt4.QtCore import*
from PyQt4.QtGui import *
from UI2 import *

class UI1Window(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.StackedLayout = QStackedLayout()
        self.StackedLayout.addWidget(self.CreateMainLayout())
        self.StackedLayout.addWidget(self.CreateMainLayout2())
        self.MainWidget = QWidget()
        self.MainWidget.setLayout(self.StackedLayout)
        self.setCentralWidget(self.MainWidget)

    def OnClicked(self):
        self.StackedLayout.setCurrentIndex(1 if self.StackedLayout.currentIndex() == 0 else 0)

    def CreateMainLayout(self):
        Widget = QWidget()
        self.VLayout = QVBoxLayout()
        self.Button = QPushButton("UI2")
        self.Button.clicked.connect(self.OnClicked)
        self.VLayout.addWidget(self.Button)
        Widget.setLayout(self.VLayout)
        return Widget

    def CreateMainLayout2(self):
        Widget = QWidget()
        self.VLayout = QVBoxLayout()
        self.Button = QPushButton("UI1")
        self.Button.clicked.connect(self.OnClicked)
        self.VLayout.addWidget(self.Button)
        Widget.setLayout(self.VLayout)
        return Widget

def main():
    App = QApplication(sys.argv)
    ProgramWindow = UI1Window()
    ProgramWindow.show()
    App.exec_()

if __name__ == "__main__":
    main()

我假设您在python中是新的,所以请检查命名约定这里 ;)。

票数 2
EN

Stack Overflow用户

发布于 2016-01-13 07:43:37

多亏了Controlix的帮助。如果其他人需要,代码在下面。

窗口控制器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt4.QtCore import*
from PyQt4.QtGui import *
from UI1 import *
from UI2 import *

class Controller(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ImportWindows()
        self.ConnectButtons()
        self.StackedLayout = QStackedLayout()
        self.StackedLayout.addWidget(self.Window1)
        self.StackedLayout.addWidget(self.Window2)
        self.MainWidget = QWidget()
        self.MainWidget.setLayout(self.StackedLayout)
        self.setCentralWidget(self.MainWidget)

    def OnClicked1(self):
        self.StackedLayout.setCurrentIndex(1)

    def OnClicked2(self):
        self.StackedLayout.setCurrentIndex(0)

    def ImportWindows(self):
        self.Window1 = UI1Window()
        self.Window2 = UI2Window()

    def ConnectButtons(self):
        self.Window1.Button.clicked.connect(self.OnClicked1)
        self.Window2.Button.clicked.connect(self.OnClicked2)

def main():
    App = QApplication(sys.argv)
    ProgramWindow = Controller()
    ProgramWindow.show()
    App.exec_()

if __name__ == "__main__":
    main()

Windows代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt4.QtCore import*
from PyQt4.QtGui import *

class UI1Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.StackedLayout = QStackedLayout()
        self.StackedLayout.addWidget(self.CreateMainLayout())
        self.MainWidget = QWidget()
        self.MainWidget.setLayout(self.StackedLayout)
        self.setCentralWidget(self.MainWidget)

    def CreateMainLayout(self):
        Widget = QWidget()
        self.VLayout = QVBoxLayout()
        self.Button = QPushButton("UI2")
        self.VLayout.addWidget(self.Button)     
        Widget.setLayout(self.VLayout)
        return Widget

def main():
    App = QApplication(sys.argv)
    ProgramWindow = UI1Window()
    ProgramWindow.show()
    App.exec_()

if __name__ == "__main__":
    main()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34754111

复制
相关文章
vue前端怎么导出图片_VUE中将页面导出为图片或者PDF
1.将页面html转换成图片 npm install html2canvas –save
全栈程序员站长
2022/09/01
2.6K0
[答疑]EA画的图如何能够导出成矢量文件
请教各位一个EA软件的使用问题。我用EA画的图如何能够导出成矢量文件?我的甲方非要把图导到CAD里,输出dwg文件。
用户6288414
2022/05/27
7380
[答疑]EA画的图如何能够导出成矢量文件
在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本
下面的shell脚本是将/opt下yyyymmdd格式的目录压缩打包为bak_yyyymmdd.zip,并通过ftp上传到192.168.0.2上的bak目录下。
魏杰
2022/12/23
1.7K0
VSCode Markdown文件导出为pdf
1. 安装VSCode插件 ---- 打开VSCode,按F1 输入ext install,选择安装扩展 搜素markdown pdf,安装插件 2. 编辑.md文件 ---- 后缀名为.md ### 1. 表格 --- | 1 | 2 | 3 | | --- | --- | --- | | a | b | c | | d | e | f | ### 2. 有序列表 --- * 1 * 2 * 3 * 31 * 32 ### 3. 超链 --- [baidu](https://w
山海散人
2021/03/03
15.7K0
Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。
DataCharm
2021/02/22
1.2K0
Pygal,可导出矢量图的Python可视化利器
Python导出Excel文件
这里用到Python的xlwt模块,逐行读取文本内容,插入到Excel里面,最后成功导出
py3study
2020/01/09
1.4K0
typecho文章批量导出为md文件
2.使用文本编辑器打开converter.php将上方代码中 $db->connect('localhost','数据库用户名','数据库密码','数据库用户名'); 的信息更改为你自己的数据库信息
迷路的朱朱
2023/05/07
7210
Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。
朱卫军 AI Python
2022/04/03
7920
Pygal,可导出矢量图的Python可视化利器
在Python中处理CSV文件的常见问题
当谈到数据处理和分析时,CSV(Comma-Separated Values)文件是一种非常常见的数据格式。它简单易懂,可以被绝大多数编程语言和工具轻松处理。在Python中,我们可以使用各种库和技巧来处理CSV文件,让我们一起来了解一些常见问题和技巧吧!
华科云商小孙
2023/09/25
3910
Python爬取网页中表格数据并导出为Excel文件
本文使用自己创建的网页进行模拟和演示,在爬取真实网页时,分析网页源代码然后修改代码中的正则表达式即可。
Python小屋屋主
2018/09/20
3.1K0
Python爬取网页中表格数据并导出为Excel文件
3D场景编辑导出-LayaAir引擎Unity插件使用详解
有开发者问过LayaAir引擎是否会有自己的3D场景编辑器,首先可以肯定的讲,一定会有。3D编辑器是LayaAir3.x引擎规划的基础组成部分(3.x正在研发中)。
Layabox Charley
2020/08/31
4.7K0
3D场景编辑导出-LayaAir引擎Unity插件使用详解
使用POI组件导出数据为Excel文件
以下例子为HR系统中一个员工管理模块,导出员工数据为Excel文件的功能。 系统结构为:Struts2+MyBaties+Spring3+MySQL HTML、JS: <input type="
张张
2019/12/26
9440
Elasticsearch使用:索引数据导出为CSV文件
这样我们的 Elasticsearch 中就会有我们的 eCommerce 索引了。
HLee
2021/01/19
3.3K0
Elasticsearch使用:索引数据导出为CSV文件
数据库分批导出为csv文件
boss需要1500万个手机号码,导出为excel文件 由于数量太大,直接存一个文件,打开电脑会直接卡死。 需要分为15批,每批100万。 可以手工在navicat软件上面运行,根据MySQL分页公式 (page-1)*page_size,page_size 也即是(当前分页-1)*每页数量,每页数量 示例sql: select mobile from tbl_sms LIMIT 0,1000000 第二页 select mobile from tbl_sms LIMIT 1000000,1000000 .
py3study
2018/08/02
2.9K0
语雀文档批量导出为Markdown文件
语雀的定位由之前的社区转向工具,也不提供批量导出Markdown的功能,有开发者提供了导出脚本可以通过语雀官方API帮我们把文档批量导出为Markdown,方便我们把文档导入notion等其他平台或者备份在本地,以备不时之需
KenTalk
2023/04/07
3.1K0
语雀文档批量导出为Markdown文件
使用Workbench导出为【sql】脚本文件
选定单选按钮【Export to self-Contained File】,并点击右侧的【...】,选择【桌面】路径,输入文件名称【T1】,点击保存。
红目香薰
2022/11/29
1.5K0
使用Workbench导出为【sql】脚本文件
教程:为Linux系统导出内核头文件
最近由于项目需要,要编译mlibc,其中需要linux kernel headers,而使用apt安装的头文件总是有问题,因此,自己从内核里面导出了一份。在此写个简单的文章记录一下。
灯珑LoGin
2023/10/18
9680
Rust 中将 markdown 渲染为 html
轻量级标记语言 markdown 现今不仅在程序员范围内流行,很多的其它行业人员也对 markdown 青睐有加。因此现在的 web 应用中,富文本编辑器越来越多的支持 markdown 语法格式,以及即时渲染功能。在存储时,数据库中存入轻量级标记语言 markdown 文档,方便后续导出再做它用的排版。也可以直接数据库中存入渲染后的 html 文档,对 API 调用者提供方便(如格式和验证等)。
niqin.com
2022/06/30
1.9K0
Rust 中将 markdown 渲染为 html
在 Python 中将数值变量转换为分类变量
这篇文章是今天发布的CTGAN的补充,我们可以使用pandas的cut函数将数据进行离散化、将连续变量进行分段汇总,这比写自定义函数要简单的多。
deephub
2021/11/16
2.1K0
点击加载更多

相似问题

SceneKit:将场景导出为STL文件以进行3D打印?

20

在Python中将嵌套列表导出为excel文件

10

在Python中将角度和速度转换为3d矢量

11

如何导出vpython图片

114

从three.js场景导出为SVG或其他矢量格式

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文