如何在 PySimple GUI 中根据按钮点击显示不同的布局? (持续窗口循环)

2024-01-02

我想知道是否有一种方法可以根据 PySimple GUI 中的按钮单击来管理不同的布局。我刚刚开始使用这个框架,我想找到导航菜单的最佳方式。不一定要使用不同的布局,但这让我想到了最直观的方法。

我在想,当选择某个子菜单按钮时,可能会有一个布局列表被推到顶部。

layouts = [layout1, layout2, layout3, layout4]

或者可以使用以下命令启动程序:

layout = layout1

当选择子菜单时,只需将状态更改为:

layout = layout2

例如,有一个“主菜单”布局,然后单击按钮,将不同的布局或“子菜单”带到“前面”,以便整个程序在一个窗口中运行。也许看起来像这样:

主菜单

按钮1

按钮2

Button 3

单击按钮 1 时,窗口保持打开状态,但显示更改为子菜单 1。

从 PySimpleGui 文档中,我使用推荐用于构建某些程序的持久窗口循环:

import PySimpleGUI as sg

sg.theme('BluePurple')

layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(15,1), key='-OUTPUT-')],
      [sg.Input(key='-IN-')],
      [sg.Button('Show'), sg.Button('Exit')]]

window = sg.Window('Pattern 2B', layout)

while True:  # Event Loop
    event, values = window.read()
    print(event, values)
    if event in  (None, 'Exit'):
        break
    if event == 'Show':
        # Update the "output" text element to be the value of "input" element
        window['-OUTPUT-'].update(values['-IN-'])

window.close()

我愿意完全改变结构,但我想在开始构建功能之前先取消菜单导航。

  • 使用 PySimpleGUI==4.14.1

你们实际上非常接近。

这就是我认为您正在寻找的东西。您需要做的是将布局添加到 Column 元素。然后将除您希望可见的一列之外的所有列设为不可见。

这是一个好主意。

import PySimpleGUI as sg

# ----------- Create the 3 layouts this Window will display -----------
layout1 = [[sg.Text('This is layout 1 - It is all Checkboxes')],
           *[[sg.CB(f'Checkbox {i}')] for i in range(5)]]

layout2 = [[sg.Text('This is layout 2')],
           [sg.Input(key='-IN-')],
           [sg.Input(key='-IN2-')]]

layout3 = [[sg.Text('This is layout 3 - It is all Radio Buttons')],
           *[[sg.R(f'Radio {i}', 1)] for i in range(8)]]

# ----------- Create actual layout using Columns and a row of Buttons
layout = [[sg.Column(layout1, key='-COL1-'), sg.Column(layout2, visible=False, key='-COL2-'), sg.Column(layout3, visible=False, key='-COL3-')],
          [sg.Button('Cycle Layout'), sg.Button('1'), sg.Button('2'), sg.Button('3'), sg.Button('Exit')]]

window = sg.Window('Swapping the contents of a window', layout)

layout = 1  # The currently visible layout
while True:
    event, values = window.read()
    print(event, values)
    if event in (None, 'Exit'):
        break
    if event == 'Cycle Layout':
        window[f'-COL{layout}-'].update(visible=False)
        layout = layout + 1 if layout < 3 else 1
        window[f'-COL{layout}-'].update(visible=True)
    elif event in '123':
        window[f'-COL{layout}-'].update(visible=False)
        layout = int(event)
        window[f'-COL{layout}-'].update(visible=True)
window.close()

[编辑] PySimpleGUI GitHub 中添加了一个名为“Demo_Column_Elem_Swap_Entire_Window.py”的新演示程序。您可以通过访问查看代码并在浏览器中运行它Trinket https://trinket.io/pysimplegui/courses/demo-programs#/layouts/swapping-window-layouts.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PySimple GUI 中根据按钮点击显示不同的布局? (持续窗口循环) 的相关文章

随机推荐

  • Laravel Faker 未知格式化程序

    我已经尝试了一切可能的方法 但我无法弄清楚我做错了什么 我正在尝试使用虚拟数据加载数据库 但我不断收到未知的格式化程序 描述 描述是我正在使用的变量之一 下面是我的工厂代码和我的播种机编码器 use Faker Generator as F
  • 我不断收到此错误:“在闭包中隐式使用‘self’;使用‘self’。”使捕获语义明确”

    我不断收到此错误 Implicit use of self in closure use self to make capture semantics explicit 即使我把自我放在代码中 请纠正我 这是我的代码 IBAction fu
  • 引导行和列不起作用

    无论我做什么 内容都不会以列的形式显示 而总是垂直堆叠 你们能仔细检查一下我的代码吗 也许这是我缺少的东西
  • 如何检测单元格值更改datagridview C#

    关于SOF的类似问题似乎没有明确的答案 我有一个DataGridView绑定到一个BindingList
  • 使用 php 进行 Windows 身份验证?

    设想 我的网站上有一个区域需要在异地时保持安全和可访问 我希望用户在网络表单中输入用于登录工作的用户名和密码 该表单将发送用户名和密码以进行身份 验证 如果有效 则用户已登录 我需要使用表单而不是弹出登录框 PHP 是首选 但我很灵活 有什
  • 如何在 ng-grid 中使用 bootstrap datepicker

    我正在尝试使用引导日期选择器 通过角度 ui 引导程序 http angular ui github io bootstrap 内ng grid http angular ui github io ng grid 我正在设置网格 scope
  • List 和 ArrayList 默认容量

    我一直在关注 NETList and 数组列表实现与反射器 http www red gate com products reflector 当看着添加 T项 我遇到了这个 确保产能 this size 1 public void Add
  • 如何使用 Twig (Symfony) 将时间格式设置为 hh:mm

    我从 MS SQL 数据库检索时间字段 例如 10 30 00 hh mm ss 我尝试在树枝模板中渲染它 但我只想显示 10 30 部分 hh mm 我尝试使用 number format 和 date format 来完成此操作 但我似
  • slf4j 石英异常

    我正在尝试在项目的一个简单示例中使用石英 我收到以下异常 我不确定这意味着什么 但是我在 POM 文件中将 slf4j 更新为 1 6 1 即使这样仍然出现 SLF4J slf4j api 1 6 x or later is incompa
  • 如何捕获(并忽略)对错误函数的调用?

    我很惊讶我在任何地方都找不到这个问题的答案 我正在编写一个 Roguelike 游戏 并且正在使用 hackage 的 ncurses 库 它是 ncurses 库的一个非常好的包装器 现在 ncurses 有一个怪癖 如果你尝试写右下角的
  • 用于简单传递性检查的不必要的谓词定义?

    对于给定的事实 trust direct p1 p2 trust direct p1 p3 trust direct p2 p4 trust direct p2 p5 trust direct p5 p6 trust direct p6 p
  • 如何禁用 Mailchimp 双重选择加入 PHP

    我对 Mailshimp 完全陌生 我在网上找不到任何可以禁用双重选择的内容 我不使用任何 Mailchimp API 我只是将 mailchimp 提供的表单放入我的 html 中 有什么想法可以不使用 API 或者如果必须使用 API
  • 我可以使用 EL 从 JSP 访问枚举类的值吗?

    我有一个枚举类USState 我想遍历 JSP 中的状态 是否可以访问列表USState不首先将这样的列表设置为属性 似乎像枚举这样的静态东西应该始终可用 但我不知道如何做到这一点 这就是我正在寻找的 工作除外
  • 读取内存中的整个文件 VS 读取块

    我对 C 和编程还比较陌生 所以请耐心等待 我正在开发一个应用程序 需要读取一些文件并按块处理这些文件 例如 以 48 字节的块处理数据 我想知道什么是更好的 性能方面 在内存中一次读取整个文件然后处理它 或者以块的形式读取文件并直接处理它
  • 实体框架 - 联合导致“无法创建类型的常量值..”

    选择全部Schedulings 是活跃的 我有以下代码 var allSchedulesOnALine CurrentUser Lines SelectMany o gt o Scheduling Where o gt o Active v
  • 根据平均值对 R 数据框中的列重新排序

    我想根据每列的算术平均值对数据框的列重新排序 For S1 S2 S3 1 1 1 2 1 1 3 3 1 预期输出是 S3 S2 S1 1 1 1 1 1 2 1 3 3 在上述情况下 平均值为 S1 2 S2 1 6666 and S3
  • Java DecimalFormat 科学记数法问题

    我正在使用Java的十进制格式 https stackoverflow com questions 168802 where can i find a tutorial to get started learning jquery类以科学记
  • 使用动态规划查找三项式系数

    我正在尝试使用动态编程在Java中实现一个计算三项式系数的函数 我正在使用以下公式 T n k 1 if n 0 and k 0 T n k 0 if k lt n or k gt n T n k T n 1 k 1 T n 1 k T n
  • 是否可以在虾文件中渲染斑点图像?

    我愿意使用Gruff https github com topfunky gruff在虾文件中渲染一些图形 我想避免将图像写入磁盘的延迟 仅让 Prawn 读取它们 格鲁夫提供to blob方法 http www rubydoc info
  • 如何在 PySimple GUI 中根据按钮点击显示不同的布局? (持续窗口循环)

    我想知道是否有一种方法可以根据 PySimple GUI 中的按钮单击来管理不同的布局 我刚刚开始使用这个框架 我想找到导航菜单的最佳方式 不一定要使用不同的布局 但这让我想到了最直观的方法 我在想 当选择某个子菜单按钮时 可能会有一个布局