运行多个窗口

这就是 PySimpleGUI 继续简单的地方,但问题空间刚刚进入“复杂”领域。

如果您希望在事件循环中运行多个窗口,那么有两种方法可以做到这一点。

  1. 当第二个窗口可见时,第一个窗口不保持活动状态
  2. 第一个窗口保持活动状态,而第二个窗口可见

您将在 GitHub(http://www.PySimpleGUI.com)的 Demo Program 区域中的 2 个演示程序中找到 2 个设计事项

非常重要 在创建新窗口时,您必须每次都使用“新”布局。您不能重复使用前一个窗口中的布局。结果,您将看到窗口 2 的布局是在更大的事件循环内定义的。

如果您有一个与窗口一起使用的窗口布局并且您已关闭该窗口,则您不能使用该窗口中的特定元素。layout每次创建新窗口时都必须重新创建变量。再读一遍那句话……layout每次创建新窗口时,都必须重新创建变量。这意味着您应该有一个以 . 开头的语句layout =。很抱歉被困在这一点上,但是很多人似乎在遵循这个简单的指令时遇到了麻烦。

窗口布局的黄金法则

你不应该重复使用 Windows 的布局......永远!

或者更明确地说....

如果您正在调用,Window那么您应该在调用之前的语句中定义您的窗口布局Window

多窗口的演示程序

有几个“演示程序”可以帮助您运行多个窗口。请下载这些程序并按照他们为您创建的示例进行操作。

以下是您在查看演示程序时会发现的一些代码模式。

多窗口设计模式 1 - 两个窗口都处于活动状态

  1. import PySimpleGUI as sg
  2. # Design pattern 2 - First window remains active
  3. layout = [[ sg.Text('Window 1'),],
  4. [sg.Input(do_not_clear=True)],
  5. [sg.Text(size=(15,1), key='-OUTPUT-')],
  6. [sg.Button('Launch 2'), sg.Button('Exit')]]
  7. win1 = sg.Window('Window 1', layout)
  8. win2_active = False
  9. while True:
  10. ev1, vals1 = win1.read(timeout=100)
  11. win1['-OUTPUT-'].update(vals1[0])
  12. if ev1 == sg.WIN_CLOSED or ev1 == 'Exit':
  13. break
  14. if not win2_active and ev1 == 'Launch 2':
  15. win2_active = True
  16. layout2 = [[sg.Text('Window 2')],
  17. [sg.Button('Exit')]]
  18. win2 = sg.Window('Window 2', layout2)
  19. if win2_active:
  20. ev2, vals2 = win2.read(timeout=100)
  21. if ev2 == sg.WIN_CLOSED or ev2 == 'Exit':
  22. win2_active = False
  23. win2.close()

多窗口设计模式 2 - 只有 1 个活动窗口

  1. import PySimpleGUIQt as sg
  2. # Design pattern 1 - First window does not remain active
  3. layout = [[ sg.Text('Window 1'),],
  4. [sg.Input(do_not_clear=True)],
  5. [sg.Text(size=(15,1), key='-OUTPUT-')],
  6. [sg.Button('Launch 2')]]
  7. win1 = sg.Window('Window 1', layout)
  8. win2_active=False
  9. while True:
  10. ev1, vals1 = win1.read(timeout=100)
  11. if ev1 == sg.WIN_CLOSED:
  12. break
  13. win1.FindElement('-OUTPUT-').update(vals1[0])
  14. if ev1 == 'Launch 2' and not win2_active:
  15. win2_active = True
  16. win1.Hide()
  17. layout2 = [[sg.Text('Window 2')], # note must create a layout from scratch every time. No reuse
  18. [sg.Button('Exit')]]
  19. win2 = sg.Window('Window 2', layout2)
  20. while True:
  21. ev2, vals2 = win2.read()
  22. if ev2 == sg.WIN_CLOSED or ev2 == 'Exit':
  23. win2.close()
  24. win2_active = False
  25. win1.UnHide()
  26. break

pysimplegui之运行多个窗口的更多相关文章

  1. WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口

    原文:WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口 当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口.但是,如果直接判断是否是 W ...

  2. Python: 捕获正在运行的CMD窗口内容

    最近需要捕获已经在运行的CMD窗口内容,并且需要根据指定输出内容来判断下一步的行动(输入指定内容). 尝试了很多次后,想到一个思路: 通过inspect.exe来获取CMD窗口Name信息通过uiau ...

  3. Java 数量为5的线程池同时运行5个窗口买票,每隔一秒钟卖一张票

    /** * 1.创建线程数量为5的线程池 * 2.同时运行5个买票窗口 * 3.总票数为100,每隔一秒钟卖一张票 * @author Administrator * */ public class ...

  4. [Winform]只允许运行一个exe,如果已运行则将窗口置前

    摘要 接着介绍项目中用到的一些方法,在winform中,打好包,有时并不允许运行多个客户端,要保证只有一个客户端运行.如果已经运行了,则弹出已运行的窗口,使其展示. 方法 判断是否有相同的进程 /// ...

  5. Windows运行机理——创建窗口

    Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...

  6. VS中运行后控制台窗口一闪就没了

    使用VS2010后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现”press any key to continue…” 或者“请按任意键继续”. 出现这种原因,主要是建立工程时选用 ...

  7. 如何解决Visual Studio 2017 运行后控制台窗口一闪就消失了

    出现这种情况的原因 安装使用Visual Studio 2017 后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现"press any key to continue-&q ...

  8. visual studio 2005 编fortran程序,运行后dos窗口显示问题

    比如程序: program main implicit none write(*,*) "AAAAAAAAAAAAAAAAAAAAAAAA" stop end 虽然可以看见DOS窗 ...

  9. VisualStudio程序运行后控制台窗口一闪就没了

    这个虽然是千查万查出来的,但也不是原创的.希望对大家有所帮助. 方案一:网上最常见的解决方案是,在程序结尾的 return 0; 之前加 system("pause") 或 get ...

  10. WIN10运行软件,窗口不显示(移动到屏幕外无法复原)的解决办法 Lebal:bug10解决方案

    双显示器切换回单显示器的时候,可能会遇到窗口移动到屏幕外不显示的情况 像这样虽然有缩略图但是点击无反应,并且平铺窗口也不管用,这个时候单击该窗口,Alt+space 执行最小化以及最大化操作即可复原

随机推荐

  1. python读取与处理netcdf数据

    netcdf是气候数据中的主流格式,当涉及到大范围的全球数万个格网点数据时,使用python脚本可以较快地读取与处理. import netCDF4 from netCDF4 import Datas ...

  2. Spring系列之类路径扫描和注册组件-8

    目录 类路径扫描和注册组件 `@Component` 使用元注释和组合注释 自动检测类和注册 Bean 定义 使用过滤器自定义扫描 在组件中定义 Bean 元数据 命名自动检测到的组件 为自动检测的组 ...

  3. PLC入门笔记10

    梯形图电路之顺序控制 顺序控制功能图 顺序控制功能图的梯形图表达 编程原则 实例分析 SMo0.1西门子首次扫描时为ON,常用作初始化脉冲 这是台达的 这是优控的..

  4. Shell写脚本关于ssh执行jar包,需要刷新JDK路径的问题

    比如脚本中下面这一段 ssh $i "java -jar /applog/$PROJECT/$APPNAME --server.port=$SERVER_PORT >/dev/null ...

  5. FII-PRX100-D开发板FPGA的烧录和RISC-V 软件代码下载

    1. 生成*.bit文件之前先RESET结果 首先,打开Vivado FII_RISCV_V2.01工程(这里以V2.01版本为例),如图1所示. 图1 FII_RISCV_V2.01工程 要生成相应 ...

  6. Vue+SSM+Element-Ui实现前后端分离(3)

    前言:经过博文(1)vue搭建,(2)ssm搭建,到这里就该真真切切的实现小功能了<-_-> 规划:实现登录,用户列表查询,访问日志aop; 开始先解决跨域:在目录config/index ...

  7. 容器数据库(CDB)和传统的非容器数据库的区别

    传统的非容器数据库在系统元数据和实例资源没有进行任何共享.容器数据库把 Oracle 提供的元数据.后台进程以及内存结构进行共享,把每个部门数据库的存储结构以 PDB 的形式独立出来,从而实现了系统资 ...

  8. oracle 白名单作用及配置教程

    出于提高数据安全性等目地,我们可能想要对oracle的访问进行限制,允许一些IP连接数据库或拒绝一些IP访问数据库. 当然使用iptables也能达到限制的目地,但是从监听端口变更限制仍可生效.只针对 ...

  9. VMware linux 网络设置

    控制面板\所有控制面板项\网络连接 1.选择 VMware Virtual Ethernet Adapter for VMnet8 网卡  ->属性-->网络 2.勾选 -> VMw ...

  10. python中创建列表、元组、字符串、字典

    >>> a = ["aaa","bbb","ccc"] ## 列表,中括号,逗号 >>> type(a) ...