PySide 通过事件切换小部件?

2023-12-08

我想不通。我希望能够根据按钮点击等事件交换 QWidgets,但我遗漏了一些东西,而且我无法按照下面的代码行搜索到任何示例。我想要做的是单击顶部按钮之一并获取下面的小部件以在 QCalendar 或 QtextEdit 之间切换。我哪里出错了?

Thanks!

#!/usr/bin/python
import sys
from PySide import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        hbox = QtGui.QHBoxLayout(self)
        widget = QtGui.QCalendarWidget()
        button1 = QtGui.QPushButton('Calendar', self)
        button1.setCheckable(True)
        button1.clicked[bool].connect(self.setWidget)
        button2 = QtGui.QPushButton('TextEdit', self)
        button2.setCheckable(True)
        button2.clicked[bool].connect(self.setWidget)
        splitter1 = QtGui.QSplitter(QtCore.Qt.Vertical)
        splitter1.addWidget(button1)
        splitter1.addWidget(button2)
        splitter1.addWidget(widget)
        hbox.addWidget(splitter1)
        self.setLayout(hbox)
        self.setGeometry(0, 0, 600, 600)
        self.setWindowTitle('Switching QWidgets')
        self.show()

    def setWidget(self, pressed):

        source = self.sender()

        val1 = QtGui.QCalendarWidget()
        val2 = QtGui.QTextEdit()

        if source.text() == "Calendar":
            widget = val1
            QtGui.QWidget.update(Example.hbox)          
        elif source.text() == "TextEdit":
            widget = val2
            QtGui.QWidget.update(Example.hbox)       
        else:
            widget = val1
            QtGui.QWidget.update(Example.hbox)

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

你必须使用QStackedWidget,您可以在其中更新索引。

class Example(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)
        self.initUI()

    def initUI(self):
        hbox = QtGui.QHBoxLayout(self)
        self.stacked = QtGui.QStackedWidget(self)
        self.stacked.addWidget(QtGui.QCalendarWidget())
        self.stacked.addWidget(QtGui.QTextEdit())

        splitter1 = QtGui.QSplitter(QtCore.Qt.Vertical)

        for text in ["Calendar", "TextEdit"]:
            btn = QtGui.QPushButton(text, self)
            btn.clicked.connect(self.setWidget)
            splitter1.addWidget(btn)

        splitter1.addWidget(self.stacked)
        hbox.addWidget(splitter1)
        self.setLayout(hbox)
        self.setGeometry(0, 0, 600, 600)
        self.setWindowTitle('Switching QWidgets')
        self.show()

    def setWidget(self):
        source = self.sender()
        if source.text() == "Calendar":        
            self.stacked.setCurrentIndex(0)
        elif source.text() == "TextEdit":
            self.stacked.setCurrentIndex(1)   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySide 通过事件切换小部件? 的相关文章

随机推荐

  • 如何在 php 中设置迭代表的替代行颜色?

    我正在使用 PHP 并且正在迭代一个带有结果数组的表 我想向其中添加行颜色和备用行颜色 如何操作 任何建议 table cellpadding 0 cellspacing 2 width 100 class table Style Bord
  • 从存储过程刷新数据

    我有一个 C 实体框架应用程序 我正在尝试从代码运行存储过程 没问题 运行时间较长 大约 30 分钟 随着流程的进行 我将每个事务的日志写入 SQL 表 我希望从应用程序启动该过程 然后在屏幕上显示登录的最后 10 条记录 可能每 10 秒
  • 远程计算机无法连接到 Visual Studio Web 服务器

    我记得 MS 开发 Cassini 时 我相信他们将其纳入 VS 05 08 所以我认为这是 Cassini Web 服务器问题 我使用 Windows XP 和 Visual Studio 2008 当我想使用多个浏览器和多个操作系统测试
  • 在另一个批处理脚本中调用一个批处理脚本并对第一个脚本返回的值执行操作

    我有一个批处理脚本 first bat 它返回值列表和退出代码 我的任务是在另一个脚本 second bat 中调用此脚本 并仅当第一个脚本的调用未返回错误代码时才对 first bat 返回的值执行操作 我已调用first bat 并将其
  • Eclipse 错误 - 无法完成安装,因为找不到一个或多个必需项目

    昨天我将Android SDK工具更新到22 6 1 更新后 Eclipse显示以下错误 This Android SDK requires Android Developer Toolkit version 22 6 1 or above
  • python argparse store --foo=bar as args.key='foo', args.value='bar'

    我想解析一个具有互斥选项组的命令行 通常 我只会使用 foo bar这会在命名空间中产生 args foo bar 但是 由于所有这些选项都是互斥的 并且我对选项名称和传递给选项的参数都感兴趣 并且我有几个需要提供给下游的选项 所以我真正想
  • 当 Directory.GetFiles() 被拒绝访问时忽略文件夹/文件

    我试图显示在所选目录 以及可选的任何子目录 中找到的所有文件的列表 我遇到的问题是 当 GetFiles 方法遇到它无法访问的文件夹时 它会引发异常并且进程停止 如何忽略此异常 并忽略受保护的文件夹 文件 并继续将可访问的文件添加到列表中
  • 在 Python 3.7 上安装 Python.net 时出错

    我试图让 Python net pythonnet 在 Python 3 7 上工作 但在运行 setup py 时失败并出现以下错误 我假设它与路径行中缺少的条目有关 但我无法对它进行任何引用 它基本上是 Windows 7 上 Pyth
  • 如何更改 JavaScript 中的日期格式[重复]

    这个问题在这里已经有答案了 可能的重复 在 JavaScript 中设置日期格式 我有这个 HTML Start Date
  • JPA继承

    您好 我是 JPA 新手 我无法理解它如何处理继承 我有一个需要在不更改数据库方案的情况下解决的特定问题 但如果您找不到解决方案 我将不胜感激使用不同数据库方案的解决方案建议 欢迎 Hibernate TopLink 解决方案 如果我不清楚
  • 如何正确初始化 QWizard 页面?

    我在将数据从 QWizard 页面发送到下一页时遇到问题 我正在使用一个变量my nameQWizard 对象作为容器 我的方法是 每当我更改 QLineEdit 的文本时Page1 变量my name我的 QWizard 对象发生了变化
  • KeyboardEvent 的 Angular 4 单元测试

    我正在尝试为我编写的实用程序编写单元测试 以限制输入字段可用的字符 该方法获取键盘事件并确定已触发哪个 event code 并返回 true 或 event preventDefault 这很有效 但我无法在茉莉花 业力中测试它 来自模板
  • R 将字符串转换为时间

    我想将字符串转换为时间 我有一个时间字段 其中字符串只有四位数字和一个字母 A 或 P 数字之间没有冒号 表明它是时间 我想将 12 小时的字符串转换为 24 小时的时间 这样我就可以删除 A 和 P 这是一个例子 time c 1110A
  • 从 vbs 中具有特定扩展名的文件夹中获取最后修改的文件

    我有以下代码 我需要的只是找到扩展名为 PNG 和最近的最后修改日期的文件 我能够找到最后修改日期 但是如果我在文件上检查扩展名 则会出现 Object 某些数字 行需要 recentFile SCRIPT For Each objFile
  • 我可以在 iframe 上使用 postMessage,谁的 html 通过 - srcdoc 属性传递?

    我无法调用 postMessage 以防我在 srcdoc 属性中传递 html without sandbox allow scripts 它给出以下错误 Failed to execute postMessage on DOMWindo
  • 将字节流转换为数字数据类型

    假设我有一个字节流 其中我知道 64 位值 64 位随机数 的位置 字节顺序为 Little Endian 由于 PHP 的整数数据类型仅限于 32 位 至少在 32 位操作系统上 我如何将字节序列转换为 PHP 数字表示形式 我认为浮点就
  • 对非数字数据使用“bsxfun”

    有没有相当于bsxfun对于非数字数据 例如 我想比较存储在两个元胞数组中的所有字符串对 gt gt a aa bb cc gt gt b dd aa gt gt bsxfun strcmp a b not working for cell
  • Git:推送被拒绝

    我有一个团队 我们正在开发一个项目 我们的一名团队成员在 GitHub 上创建了一个存储库 并将其他人添加为协作者 我的团队成员将我们的代码提交到这个存储库 我对我的部分进行了更改 当我尝试提交它时 出现错误 如何将更改提交到我作为协作者的
  • 在完成块中调用时 UIAlertView 需要很长时间才能出现

    我的应用程序的一部分需要日历访问 这需要调用EKEventStore method void requestAccessToEntityType EKEntityType entityType completion EKEventStore
  • PySide 通过事件切换小部件?

    我想不通 我希望能够根据按钮点击等事件交换 QWidgets 但我遗漏了一些东西 而且我无法按照下面的代码行搜索到任何示例 我想要做的是单击顶部按钮之一并获取下面的小部件以在 QCalendar 或 QtextEdit 之间切换 我哪里出错