免费的Python GUI框架。
项目描述
FreeSimpleGUIQt
FreeSimpleGUIQt入门指南
欢迎使用FreeSimpleGUI Qt的alpha版本!
您可以使用与旧版FreeSimpleGUI的tkinter版本相同的代码。
FreeSimpleGUIQt使用PySide2或PyQt5来访问Qt。但是,PyQt5最近出现了一些问题,所以请谨慎使用。
为了最大限度地减少潜在的问题和损坏的功能,如果可能的话,请使用PySide2而不是PyQt5。
将FreeSimpleGUI代码迁移到FreeSimpleGUIQt
要将代码从tkinter实现迁移。请按照以下步骤操作
- 将
import FreeSimpleGUI
更改为FreeSimpleGUIQt
就这样!好吧,可能我应该说的是“步骤”而不是“步骤”。在所有情况下可能并不那么简单,但总的来说还是很简单的。
FreeSimpleGUI 和 FreeSimpleGUIQt 的区别
尺寸
虽然你可以像在 tkinter 中那样使用“基于字符”的尺寸,但最好使用基于像素的尺寸,因为 Qt 就是用这种尺寸。FreeSimpleGUIQt 会从字符尺寸到像素尺寸进行一些非常粗糙/基本的转换。这足以让您的元素至少可见。但转换可能不太理想。
字体
字体应采用(字体家族,大小)的格式。您也可以使用较旧的基于字符串的格式,但它无法与设置如粗体和斜体一起使用。FreeSimpleGUIQt 会将字符串 'Courier 20' 转换为元组 ('Courier', 20)。
为 Python 3 安装 FreeSimpleGUIQt
pip install --upgrade FreeSimpleGUIQt
在 Linux 系统上,您需要运行 pip3。
pip3 install --upgrade --no-cache-dir FreeSimpleGUIQt
为 Python 3 安装 PySide2
强烈建议您使用 PySide2。如果找不到 PySide2,代码将尝试使用 PyQt5。不建议使用 PyQt5。
要安装 PySide2
pip install PySide2
PyQt5 已不再受支持。仅支持 PySide2
太多的区别导致了许多头痛。支持 1 个 Qt 端口本身就很难。解析 pyside2 和 pyqt5 之间的差异简直太费力了。
测试您的安装
安装后,或者将 .py 文件复制到您的应用程序文件夹后,您可以使用 Python 测试安装。在命令提示符中启动 Python。
python3
>>> import FreeSimpleGUIQt
>>> FreeSimpleGUIQt.main()
您将在屏幕中央看到一个示例窗口。如果安装不正确,您在执行这些命令中的一个很可能会收到错误消息。
这是您应该看到的窗口
先决条件 Python 3
PySide2 或 PyQt5(实验性)
使用 - Python 3
要在您的代码中使用,只需导入.... import FreeSimpleGUIQt as sg
然后,使用与任何其他在 tkinter 上运行的 FreeSimpleGUI 程序完全相同的代码。
状态
文档
有关主要 PySimpleGUI 文档,请访问 http://www.PySimpleGUI.org。然而,请记住,那是 tkinter 版本。但它是目前该包的最佳文档。文档字符串即将到来这个 Qt 发布,但这需要一些时间来完成。当它们到来时,这个 README 也会很棒。
功能完成!(有点...所有元素都可用)
所有主要功能都已完成。它们可能没有所有选项都可用,但可以添加到您的窗口中。这是一个令人难以置信的一周。
希望您喜欢这个预览版!请在 GitHub 网站上发布截图。有一个问题,用户在那里发布他们的应用程序。这是一个您可以展示自己的地方,也是其他人可以从中学习您的设计的地方。您的窗口不需要太复杂.... 所有 GUI,无论多么简单,都是我们可以从中学习的东西。
功能特性
功能每天都在为 FreeSimpleGUI 的这个 Qt 端口添加。这些元素是“完整”的(这是一个相对术语...有些比其他更完整)
- 文本
- 单行输入
- 多行输入
- 输出多行(新)
- 旋钮(新)
- 输出 - 重定向 stdout
- 微调器
- 滑块
- 按钮 - RButtons,CButtons,快捷按钮
- 复选框
- 单选按钮
- 列表框
- 组合框
- 标签框
- 列 - 使您几乎可以创建任何布局!
- 窗口的 alpha 通道
- 无标题栏设置
- 多行输入提交
- 字体
- 文本和背景颜色
- 读取调用的超时时间
- 大多数元素的提交参数更改
- 表格
- 基本显示
- 读取所选行
- change_submits事件
- 更新
- 背景图(新功能)
- 图形 - 绘制线、绘制圆、绘制文本
- 图像元素
- 树元素
- 标签页
- 菜单
- 菜单按钮元素
缺失的功能
目前明显的缺失功能包括
- 图形元素方法 - 删除、绘制圆弧等
- 树元素 - 返回所选行,但将值映射到对用户有意义的值有点困难。
系统托盘
这是FreeSimpleGUIQt的唯一功能。不知道如何使用tkinter实现。然而,在WxPython上看起来可能可以工作。
除了运行正常窗口外,现在还可以在系统托盘下有一个图标,您可以通过它来读取菜单事件。有一个新的SystemTray对象,它的使用方式类似于Window对象。您首先获取一个,然后执行读取以获取事件。
以下是SystemTray对象的定义。
SystemTray(menu=None, filename=None, data=None, data_base64=None, tooltip=None):
'''
SystemTray - create an icon in the system tray
:param menu: Menu definition
:param filename: filename for icon
:param data: in-ram image for icon
:param data_base64: basee-64 data for icon
:param tooltip: tooltip string '''
您会注意到有3种不同的方式来指定图标图像。base-64参数允许您在.py代码中定义一个变量,该变量是编码的图像,因此您不需要任何额外的文件。非常实用的功能。
系统托盘设计模式
这里是一个您可以用来快速入门的设计模式。
此程序将创建一个系统托盘图标并执行阻塞读取。如果从系统托盘选择“打开”项,则显示弹出窗口。
import FreeSimpleGUIQt as sg
menu_def = ['BLANK', ['&Open', '---', '&Save', ['1', '2', ['a', 'b']], '&Properties', 'E&xit']]
tray = sg.SystemTray(menu=menu_def, filename=r'default_icon.ico')
while True: # The event loop
menu_item = tray.Read()
print(menu_item)
if menu_item == 'Exit':
break
elif menu_item == 'Open':
sg.Popup('Menu item chosen', menu_item)
设计模式创建了一个将显示此菜单的图标:
图标
在指定“图标”时,您可以使用3种不同的格式。
filename
- 文件名data_base64
- base64字节字符串- '
data
- 内存中的位图或其他“原始”图像
您将在初始化语句和更新方法中找到用于指定这3个选项的3个参数。
菜单定义
menu_def = ['BLANK', ['&Open', '&Save', ['1', '2', ['a', 'b']], '!&Properties', 'E&xit']]
菜单使用列表定义。一个“菜单条目”是一个字符串,指定
- 显示的文本
- 键盘快捷键
- 键
有关使用键与菜单一起使用的信息,请参阅菜单键部分。
没有键和键盘快捷键的条目是一个简单的字符串 'Menu Item'
如果您想使“M”成为键盘快捷键,则在快捷键字母前放置一个&
。 '&Menu Item'
您可以通过添加“键”来使菜单项唯一,或作为识别菜单项的另一种方式(除文本外)。键通过在文本部分放置 ::
后添加。
'Menu Item::key'
第一个条目可以忽略。'BLANK'
被选择为这个例子。这样做是因为通常您会在菜单栏下的某个标题下指定这些菜单。但在这里没有标题,所以用任何您想要的值填充。
分隔符 如果您想在两个项目之间添加分隔符,请添加条目 '---'
,它将在您的菜单中该位置添加一个分隔符项目。
禁用菜单条目
如果您想禁用菜单条目,请在菜单条目前放置一个!
拉伸元素用于对齐元素
使用Stretch
元素将一个或多个元素在其容器内左对齐、右对齐或居中对齐。
如果单个Stretch
元素在一行上,则它将推动行上的其他元素向左或向右。如果Stretch
在左边,则右侧的元素将被推到右边。
要将元素居中,在每个元素两侧放置一个Stretch
元素(同一行将有两个Stretch
元素)
系统托盘方法
读取 - 读取上下文菜单或检查事件
def Read(timeout=None)
'''
Reads the context menu
:param timeout: Optional. Any value other than None indicates a non-blocking read
:return: String representing meny item chosen. None if nothing read.
'''
timeout
参数指定等待事件发生的时长。如果在超时期间没有任何事件发生,则返回“超时事件”。这些类型的读取可以异步运行。要运行非阻塞操作,请在读取调用中指定timeout=0
。
读取返回所选菜单项的菜单文本,包括键。如果您将Open::key
指定为菜单项,并且用户点击了Open
,则在读取完成后将接收到字符串Open::key
。
读取的特殊返回值
除了菜单项之外,读取调用还可以返回几个特殊值。它们包括:
EVENT_SYSTEM_TRAY_ICON_DOUBLE_CLICKED - 托盘图标被双击
EVENT_SYSTEM_TRAY_ICON_ACTIVATED - 托盘图标被单击
EVENT_SYSTEM_TRAY_MESSAGE_CLICKED - 消息气泡被点击
如果读取调用中设置了超时值,并且没有可用的事件,则返回TIMEOUT_KEY
隐藏
隐藏图标。请注意,在图标隐藏时不会显示任何消息气泡。
def Hide()
关闭
与隐藏执行相同操作
def Close()
取消隐藏
显示之前隐藏的图标
def UnHide()
显示消息
在系统托盘区域上方显示一个气球。您可以指定要显示在气球中的图标,或者可以将messageicon
设置为预置值之一。
此消息有一个自定义图标。
预置的messageicon
值包括:
SYSTEM_TRAY_MESSAGE_ICON_INFORMATION
SYSTEM_TRAY_MESSAGE_ICON_WARNING
SYSTEM_TRAY_MESSAGE_ICON_CRITICAL
SYSTEM_TRAY_MESSAGE_ICON_NOICON
ShowMessage(title, message, filename=None, data=None, data_base64=None, messageicon=None, time=10000):
'''
Shows a balloon above icon in system tray
:param title: Title shown in balloon
:param message: Message to be displayed
:param filename: Optional icon filename
:param data: Optional in-ram icon
:param data_base64: Optional base64 icon
:param time: How long to display message in milliseconds :return:
'''
注意,在Windows上,可能需要更改注册表才能启用显示消息气泡。为了修复此问题,您必须创建此截图中所显示的DWORD。
更新
您可以在系统托盘对象中更新这些项目中的任何一项
- 菜单定义
- 图标
- 工具提示
全部更改或只更改一个。
Update(menu=None, tooltip=None,filename=None, data=None, data_base64=None,)
'''
Updates the menu, tooltip or icon
:param menu: menu defintion
:param tooltip: string representing tooltip
:param filename: icon filename
:param data: icon raw image
:param data_base64: icon base 64 image
:return:
'''
带键的菜单
FreeSimpleGUIQt提供将键添加到菜单项的能力。为此,您需要在菜单定义的末尾添加::和键值。
menu_def = ['文件', ['隐藏::key', '&打开::key', '&保存', ['1', '2', ['a','b']], '&属性', 'E&退出']]
菜单定义将"key"键添加到菜单项隐藏和打开。
如果您想更改分隔字符从::改为其他,请更改变量MENU_KEY_SEPARATOR
当菜单项具有键并被选择时,将返回整个字符串。如果选择了隐藏,则从读取中返回隐藏::key。请注意,快捷字符&不会被读取返回。
动态窗口(元素可见性)
从0.20.0版本开始,添加了扩展和缩小的能力。
虽然窗口看起来是动态的,但实际情况是元素在您定义窗口布局时就已经创建。您将使用带有标志visible=False
的这些“额外”元素。然后,当您希望显示这些元素时,调用元素的Update
方法,将visible
设置为True。
在调用Update
方法后,非常重要的一点是要调用window.VisibilityChanged()
,以便您的窗口可以更改大小。没有这个调用,您的窗口将不会缩小。它会正确增长,但不会缩小。虽然FreeSimpleGUI可以代表用户完成此操作,但考虑到用户可能希望窗口大小保持不变,而元素只是出现和消失,留下空白。如果窗口自动增长和缩小,这将无法实现。请尽力调用VisibilityChanged
。
enable_events
参数
所有能够产生事件的所有元素现在都有一个参数 enable_events
。这与旧参数 change_submits
或 click_submits
是完全相同的。想法是统一使用一个所有元素都使用的名称。旧参数将继续工作,但文档和示例程序将引导您远离它们,转向使用 enable_events。
许可证
GNU Lesser General Public License (LGPL 3) +
版权所有 2024 Spencer Phillip Young
版权 2018, 2019, 2020 PySimpleGUI
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码发行版
构建发行版
FreeSimpleGUIQt-1.0.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0931d4c5eb9715fe04d983825e46ba4590e4578d7dc3093a58cceb2a59f26db0 |
|
MD5 | 0197516cdea5a69a37b87182e621d2be |
|
BLAKE2b-256 | b7023cd9a1714713fb6d489521f0eecf68e59cb0756fd582f70e6fdaf14b5248 |
FreeSimpleGUIQt-1.0.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 90b52bd26cc3bf757007e53fa6ea9ea1f8d0ea0b99b828dcf059300694ed2650 |
|
MD5 | c3342767ad81507bfce8a9e2e877e314 |
|
BLAKE2b-256 | fede5d8110fa19fcafcbeb4df55f9c27d5cafcd7beddb0cf990cfc0ac06dfd46 |