pysimplegui之画布,图形,表格和树结构元素
画布元素
在我看来,tkinter Canvas 小部件是 tkinter 小部件中功能最强大的。虽然我尽我所能将用户与任何与 tkinter 相关的东西完全隔离,但 Canvas 元素是一个例外。它可以与许多其他软件包集成,通常会产生惊人的效果。
但是,还有另一种获得这种力量的方法,那就是通过 Graph Element,一个更强大的元素,因为它使用 Canvas,您可以在需要时直接访问它。Graph Element拥有大量Canvas Element所没有的绘制方法。另外,如果需要,您可以通过成员变量访问 Graph Element 的“Canvas”。
Matplotlib、Pyplot 集成
注意 - 最新版本的 Matplotlib (3.1.0) 不再适用于这种技术。您必须安装 3.0.3 才能使用演示程序部分中提供的演示 Matplotlib 程序。
一种这样的集成是与 Matplotlib 和 Pyplot。编写了一个 Demo 程序,您可以将其用作设计模式,以了解如何使用 Canvas Widget。
def Canvas(canvas - a tkinter canvasf if you created one. Normally not set
background_color - canvas color
size - size in pixels
pad - element padding for packing
key - key used to lookup element
tooltip - tooltip text)
获取 tkinter Canvas Widget 的操作顺序为:
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds
# define the window layout
layout = [[sg.Text('Plot test')],
[sg.Canvas(size=(figure_w, figure_h), key='canvas')],
[sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))]]
# create the window and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', layout).Finalize()
# add the plot to the window
fig_photo = draw_figure(window['canvas'].TKCanvas, fig)
# show it all again and get buttons
event, values = window.read()
要从 PySimpleGUI 获取 tkinter Canvas 小部件,请执行以下步骤: * 将 Canvas 元素添加到您的窗口 * 布局您的窗口 * 调用window.Finalize()- 这是您不能忘记的关键步骤 * 通过使用键查找来查找 Canvas 元素 * 您的 Canvas 小部件对象将是 found_element.TKCanvas * 在画布上随心所欲地绘制 * 调用window.read()- 在调用 Read 之前,画布上不会出现任何内容
请参阅Demo_Matplotlib.py您可以复制的食谱。
方法和属性
TKCanvas - 不是方法而是属性。返回 tkinter 画布小部件
图形元素
所有数学爱好者都会喜欢这个元素......所有非数学爱好者都会更喜欢它。
我发现没有什么比从 GUI 框架处理图形坐标系更有趣的了。它总是与我想要的相反。(0,0) 在左上角……有时……还是在左下角?简而言之,这是一件让人头疼的事情。
如何获得自己的 (0,0) 位置,然后使用这些坐标而不是 tkinter 提供的坐标?这产生了非常强大的功能 - 以您自己的单位工作,然后在以像素定义的区域中显示它们。
如果您曾经对 (0,0) 在您绘制的某个表面上的位置感到沮丧,那么不要害怕,您的沮丧就到此为止了。您可以使用所需的任何坐标系进行绘制。将 (0,0) 放置在您想要的任何位置,包括图表上的任何位置。您可以定义一个 Graph,其 X 轴为 -2.1 到 -3.5 之间的所有负数,Y 轴为 -3 到 -8.2 之间的所有负数
您需要提供 3 个值来提供图形元素。他们是:
- 画布大小(以像素为单位)
- 坐标系的左下角 (x,y) 坐标
- 坐标系的右上角 (x,y) 坐标
提供这些值后,您可以通过创建图形图形在图形上乱涂乱画。Graph Figures被创建,并通过调用获得一个Figure ID:
- 画圆
- 画线
- 绘图点
- 绘制矩形
- 画椭圆
- 绘制图像
您可以通过提供要移动的x,y 增量的图形 ID 在画布上移动图形。它不会移动到绝对位置,而是从图形现在的位置偏移。(使用 Relocate 移动到特定位置)
graph.MoveFigure(my_circle, 10, 10)
您还将使用此 ID 删除您绘制的单个图形:
graph.DeleteFigure(my_circle)
图形元素内的鼠标事件
如果您为图形元素启用了事件,那么您可以接收鼠标单击事件。如果您drag_submits在创建图形元素时另外启用,那么当您在窗口内“拖动”时也会收到事件。“拖动”定义为按下左键然后移动鼠标。
当拖动事件发生时,该事件将成为 Graph Element 的键。values 字典中value返回的是当前鼠标 (x,y) 位置的元组。
这意味着您将获得事件的“流”。如果鼠标移动,您将获得至少 1 个事件,并且可能会超过 1 个事件。
拖动鼠标向上事件
当您drag_submits启用时,会出现一个棘手的情况......当您完成拖动并且松开鼠标按钮时会发生什么?“Mouse Up”事件如何转发回您的代码。
“Mouse Up”将为您生成一个值为: Graph_key+的事件'+UP'。因此,如果您的 Graph Element 有一个键'_GRAPH_',那么当您释放鼠标按钮时您将收到的事件是: '_GRAPH_+UP'
是的,这有点奇怪,但它确实有效。这也很简单。在处理这些类型的字符串值时,我建议使用.startswith和.endswith内置函数。
下面是通过在 Graph 元素内单击并拖动键 == 'graph' 生成的events和的示例:values dictionary
graph {'graph': (159, 256)}
graph {'graph': (157, 256)}
graph {'graph': (157, 256)}
graph {'graph': (157, 254)}
graph {'graph': (157, 254)}
graph {'graph': (154, 254)}
graph {'graph': (154, 254)}
graph+UP {'graph': (154, 254)}
表格元素
表和树元素是 PySimpleGUI 中最复杂的。他们有很多选择和很多不寻常的特征。
window.read() 从表元素返回值
调用表元素返回的值Window.read是当前突出显示的行号列表。
QtTable.Get()调用
PySimpleGUIQt中的新功能是添加了Table方法Get。此方法返回当前在 GUI 中显示的表。为了获得用户可能对表格进行的任何编辑,需要此方法。
对于 tkinter 端口,它将返回创建表时传入的相同值,因为用户无法修改 tkinter 表(如果您知道方法,请提交问题)。
已知的Table可视化问题......
有一个难以捉摸的问题,点击表头或靠近表头会导致 tkinter 在您移动鼠标时发疯并不断调整列的大小。
Table这个问题自元素第一次发布以来就存在。它已在 4.3 版中修复。
Python 3.7.3、3.7.4、3.8 中的已知表格颜色?
在过去几个 Python 版本中发布的 tkinter 有一个错误。所有类型的表格颜色都不起作用。行的背景永远不会改变。如果这对您很重要,您将需要降级您的 Python 版本。3.6 与 PySimpleGUI 和 tkinter 配合得非常好。
空表
如果您希望将表作为空表开始,则需要指定一个空表。此列表推导将创建一个包含 15 行和 6 列的空表。
data = [['' for row in range(15)]for col in range(6)]
表中的事件
有两种方法可以获取从表元素生成的事件。 change_submits单击一行 bind_return_key时生成的事件 双击一行或在一行上按下返回键时生成事件。
树元素
树元素和表格元素是近亲。表元素中的许多参数适用于树元素。特别是标题信息、列宽等。
与表格不同,树没有标准格式。因此必须构造传递给树元素的数据结构。这是使用 TreeData 类完成的。过程如下:
- 获取 TreeData 对象
- 将数据“插入”到树中
- 将填充的 TreeData 对象传递给 Tree Element
树数据格式
def TreeData()
def Insert(self, parent, key, text, values, icon=None)
为了将数据“插入”到树中,调用 TreeData 方法 Insert。
Insert(parent_key, key, display_text, values)
要指示在树的头部插入,请使用 "" 的父键。因此,树中的每个顶级节点都会有一个父节点 = ""
此代码创建一个 TreeData 对象并填充 3 个值
treedata = sg.TreeData()
treedata.Insert("", '_A_', 'A', [1,2,3])
treedata.Insert("", '_B_', 'B', [4,5,6])
treedata.Insert("_A_", '_A1_', 'A1', ['can','be','anything'])
请注意,您可以对 display_text 和键使用相同的值。您唯一需要注意的是您不能重复键。
读取窗口时,表格元素将返回用户选择的行列表。如果未选择任何行,则列表将为空。
树条目上的图标
如果您希望在树项目旁边显示一个图标,那么您在调用中指定图标Insert。icon您可以使用可选参数传入文件名或 Base64 字节字符串。
这是显示带有树条目的图标的结果。

pysimplegui之画布,图形,表格和树结构元素的更多相关文章
- 【学习笔记】HTML基础:列表、表格与媒体元素
一.列表是信息资源的一种展现形式,它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者能够快速的获取相应的信息. 1.无需列表 <ul> <li>第一项</li ...
- HTML第二章:列表,表格,媒体元素
第二章:列表,表格,媒体元素 列表:有三种,有序列表,无序列表,定义列表 1.有序列表:<ol></ol> 列表项:<li></li&g ...
- vue 表格阻止父元素冒泡事件
思路如下:1.给复选框定义一个类型,type="selection" 2.在点击函数中就可以使用判断条件来进行复选框的阻止冒泡.rowDetailShow(row, event, ...
- HTML5 第二章 列表和表格和媒体元素
列表: (1)什么是列表? 列表就是信息资源的一种展示形式. (2)无序列表: 语法: <ul> <li>第1项</li> <li>第2项</li ...
- HTML列表,表格与媒体元素
一.列表 信息资源的一种展示形式 二.列表的分类 1.有序列表 <ol> <li>列表项1</li> <li>列表项2</ ...
- HTML的列表,表格与媒体元素
一.无序列表 <ul> <li>无序列表</li> &l ...
- HTML5 列表、表格、媒体元素
无序列表 <ul> <li>范冰冰演藏族女孩</li> <li>拍集体合影后自拍</li> <li>诗隆甜蜜出游</li& ...
- HTML列表,表格与媒体元素
一.无序列表 <ul> <li>无序列表</li> <li>有序列表</li> <li>自定义列表</li> < ...
- HTML表格中各元素之间属性之间的相互影响
开发了一个动态表格制作程序,用的是谷歌浏览器.发现几个现象,记录如下: 1.按照技术文档的说法,正规的表格样式如下: <table> <caption>标题</capti ...
- html/css 表格元素以及表格布局
一,html之表格 1,一个完整的html表格所包含的元素 <!--一个完整的html表格--> <!--cellpadding代表单元格内的文字和单元格边框之间的间距--> ...
随机推荐
- C# net core 从文件流中获取文件头、匹配文件类型
常用文件的文件头如下: (以前六位为准) JPEG (jpg),文件头:FFD8FF PNG (png),文件头:89504E47 GIF (gif),文件头:47494638 TIFF (tif), ...
- js 复制链接内容
<script type="text/javascript">//复制活动地址 function shareUrl(id) { var url = 'http://H5 ...
- Mysql explain 每个属性含义
Mysql explain explain 常用于分析sql语句的执行效率,使用时在正常的select语句之前添加explain并执行就会返回执行信息,返回的执行信息如下: id:id列的编号是se ...
- C++ || const_cast 将const变量转为非const
点击查看代码 #include <iostream> using namespace std; int main() { int a =5; const int* p=&a;//需 ...
- C# winform DataGridView 一列显示星号
private void myDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventA ...
- [扫描工具]dirsearch简单使用
[扫描工具]dirsearch简单使用 dirsearch是一个python开发的目录扫描工具.和我们平时使用的dirb.御剑之类的工具一样,就是为了扫描网站的敏感文件和目录从而找到突破口. 安装: ...
- LaTeX in 24 Hours - 3. Formatting Texts I
文章目录 本章内容:文本格式 I 3.1 Sectional Units 3.2 Labeling and Referring Numbered Items 3.3 Texts Alignment 3 ...
- Python中列表、元组、字典的区别
列表: 列表是一种数据结构,每一个元素对应一个值.例如:list=['a','b','c'] 访问列表数据通过下标的方式来进行数据访问,list[下标] list.append(i) 添加数据 de ...
- JConsole连接远程Java进程
1.Java进程启动新增如下参数 java -Djava.rmi.server.hostname=118.89.68.13 #远程服务器ip,即本机ip -Dcom.sun.management.jm ...
- mfc edit只允许输入数字
1.给EDIT控件添加 EN_CHANGE 事件 2.事件中的代码如下: 1 CString strEditVidoe; 2 GetDlgItem( iId )->GetWindowText( ...