qt5python gui cookbook_Python GUI Programming Cookbook学习笔记

学习笔记

Chapter2 Layout Management

第一节:Arranging several labels within a label frame widget

把代码加进上一篇文章中的mainloop(事件循环)

labelsFrame=ttk.LabelFrame(win,text=' Labels in a Frame ')

labelsFrame.grid(column=0,row=7)

#将labels 放进一个容器

ttk.Label(labelsFrame,text='Label1').grid(column=0,row=0)#2

ttk.Label(labelsFrame,text='Label2').grid(column=1,row=0)#3

ttk.Label(labelsFrame,text='Label3').grid(column=2,row=0)#4

#将光标放入输入name的框里

nameEntered.focus()

#也可以将label标签垂直放置,就是把列设置为0

ttk.Label(labelsFrame,text='Label1').grid(column=0,row=0)

ttk.Label(labelsFrame,text='Label2').grid(column=0,row=1)

ttk.Label(labelsFrame,text='Label3').grid(column=0,row=2)labelsFrame=ttk.LabelFrame(win,text=' Labels in a Frame ')

创建一个LabelFrame部件,给这个部件命名#2-#4句是将创建的label们放进labelframe

通过为行和列赋不同的值改变标签的展示方式(水平或垂直或其他)

nameEntered.focus()让光标在输入框中显示

第二节:Using padding to add space around widgets

接下来的代码是给部件之间加一些空间

#加入padx和pady参数

labelsFrame.grid(column=0,row=7,padx=20,pady=40)部件之间有的呼吸的空间,呼~

一个单词:respectively:分别的

#用for循环为labelframe中每一个label都加一些空间

for child in labelsFrame.winfo_children():

child.grid_configure(padx=8,pady=4)

代码说明:grid_configure()函数让我们在主循环(mainloop)之外修改 UI元素

ttk.Label(labelsFrame,text='Label1....真.....的.....很...长....').grid(column=0,row=0)

第三节:How widgets dynamically expand the GUI

labelsFrame.grid(column=1,row=7,padx=20,pady=40)

调节column的值改变labelframe的位置

PS:

行和列怎么设置?索引都是从0开始

row0,col0:第0行第0列

row0,col1:第0行第1列

row1,col0:第1行第0列

第四节:Aligning the GUI widgets by embedding frames within frames

人话应该就是框中有框???

接下来创建一个中心ttk.LabelFrame,这个ttk.LabelFrame从属于主循环

其他的所有部件都从属于这个ttk.LabelFrame

win=tk.Tk()

#加一个标题

win.title('我的难看的GUI')

#创建一个容器容纳所有的部件

monty=ttk.LabelFrame(win,text=' Monty Python ')

monty.grid(column=0,row=0)

#修改让所有的控件都从属于monty代替win

aLabel=ttk.Label(monty,text='a Label')

用白话说就是创建了一个总的框将那些零零碎碎的部件打包在一起

但这个总的框从属于mainloop

所以这个从属于mainloop的总的框的名字是aLabel设置之后会出现这个细细的框

注意:要将之前所有的部件的win改成monty对齐的

ttk.Label(monty,text='Enter a name:').grid(column=1,row=1,sticky='W')

sticky='W'的W表示west,向左,四个方位(west, east, north and south),

也可以用tk.W代替W

ttk.Label(monty,text='Enter a name:').grid(column=1,row=1,sticky=tk.W)

也可以用在循环之中:

winfo_children(),grid_configure(sticky='W')

winfo_children()返回一个列表:

注意:要将之前所有的部件的win改成monty

第五节:Creating menu bars

创建菜单栏

#************* 第五节******************

from tkinter import Menu

#创建一个menu bar

menuBar=Menu(win)

win.config(menu=menuBar)

fileMenu=Menu(menuBar)

fileMenu.add_command(label='New')

menuBar.add_cascade(label='File',menu=fileMenu)

add_cascade()设置下拉菜单垂直排列

fileMenu=Menu(menuBar)

#添加第一个下拉菜单

fileMenu.add_command(label='New')

#加了一个分隔符

fileMenu.add_separator()

#添加第二个下拉菜单

fileMenu.add_command(label='Exit')

menuBar.add_cascade(label='File',menu=fileMenu)

fileMenu=Menu(menuBar,tearoff=0)

tearoff=0移除菜单中的虚线

#添加Help菜单

helpMenu=Menu(menuBar,tearoff=0)

helpMenu.add_command(label='About')

menuBar.add_cascade(label='Help',menu=helpMenu)

编写一个退出函数

def _quit():

win.quit()

win.destroy()

exit()

fileMenu.add_command(label='Exit',command=_quit)

第六节:Creating tabbed widgets

重新创建一个模块

import tkinter as tk

from tkinter import ttk

win=tk.Tk()

win.title('Python GUI')

tabControl=ttk.Notebook(win)# 创建一个Tab Control

tab1=ttk.Frame(tabControl)#创建一个 tab

tabControl.add(tab1,text='Tab 1')#加一个tab

tabControl.pack(expand=1,fill='both')# pack可见

win.mainloop()# Start GUI

加入第二个tab

import tkinter as tk

from tkinter import ttk

win=tk.Tk()

win.title('Python GUI')

tabControl=ttk.Notebook(win)# 创建一个Tab Control

tab1=ttk.Frame(tabControl)#创建一个 tab

tabControl.add(tab1,text='Tab 1')#加一个tab

tabControl.pack(expand=1,fill='both')# pack可见

tab2=ttk.Frame(tabControl)

tabControl.add(tab2,text='Tab 2')

win.mainloop()# Start GUI

#************* 第六节******************

#Creating tabbed widgets

import tkinter as tk

from tkinter import ttk

win=tk.Tk()

win.title('Python GUI')

tabControl=ttk.Notebook(win)# 创建一个Tab Control

tab1=ttk.Frame(tabControl)#创建一个 tab

tabControl.add(tab1,text='Tab 1')#加一个tab

tabControl.pack(expand=1,fill='both')# pack可见

#加第二个tab

tab2=ttk.Frame(tabControl)

tabControl.add(tab2,text='Tab 2')

monty=ttk.LabelFrame(tab1,text=' Monty Python ')

monty.grid(column=0,row=0,padx=8,pady=4)

ttk.Label(monty,text='输入名字:').grid(column=0,row=0,sticky='W')

#在tab2中创建一个labelframe

monty2=ttk.LabelFrame(tab2,text='斯内普教授')

monty2.grid(column=0,row=0,padx=8,pady=4)

ttk.Label(monty2).grid(column=0,row=0,sticky='W')

chVarDis=tk.IntVar()

check1=tk.Checkbutton(monty2,text='Disabled',variable=chVarDis,state='disabled')

check1.select()

check1.grid(column=0,row=1)

colors=['Blue','Gold','Red']

radVar=tk.IntVar()

def radCall():

radSel=radVar.get()

if radSel==0:

monty2.configure(text='蓝')

elif radSel==1:

monty2.configure(text='金')

elif radSel==2:

monty2.configure(text='红')

for col in range(3):

curRad='rad'+str(col)

curRad=tk.Radiobutton(monty2,text=colors[col],variable=radVar,value=col,command=radCall)

curRad.grid(column=col,row=5,sticky=tk.W)

win.mainloop()# Start GUI

radCall()中定义了在tab2中点击不同颜色的radiobutton,框显示的名称对应其颜色

第七节Using the grid layout manager

#Using the grid layout manager

scrolW=30

scrolH=3

scr=scrolledtext.ScrolledText(monty,width=scrolW,height=scrolH,wrap=tk.WORD)

scr.grid(column=0,sticky='WES',columnspan=3)

tkinter会自动添加缺失的行,即使在我们没有意识到有缺失行的问题时.

以上为第二章的学习内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS 定义手势监听器详解,利用 UIGestureRecognizer 进行捏合、旋转、平移、点击、长按手势事件响应

IOS中我们可以通过UITouch进行触摸事件监听,但是UITouch实现捏合、旋转、长按等手势事件监听非常麻烦。IOS中提供 UIGestureRecognizer 的子类帮我们简洁等实现捏合、旋转等特殊手势监听。并且一个视图可添加多个不同等手势监听器。 开启userInteractionEnabled IOS…

abb限位开关已打开drv1_Telemecanique传感器限位开关产品系列

Telemecanique传感器Telemecanique传感器,是施耐德电气旗下专精于传感器产品的知名品牌,已有百年历史。被公认为全球传感器领域的专家。从机电式到电子式产品,从检测到识别再到距离测量,我们拥有覆盖广泛的传感器产品线。我们已成…

关于Vue 3.0 的改进 Proxy 代理实现数据驱动视图

Vue 3.0 中使用了 Proxy 对象代理进行拦截实现了数据绑定视图的驱动操作。弥补了vue2.0中的局限,比如属性删除增加监听、对数组基于下标的修改、长度变化等等。 参考一下网上流传的机制图 Proxy 是什么? 首先我们来了解一下Proxy是什么。Proxy不是简单…

两边双虚线是什么意思_行星减速机生产厂家解析行星减速机双支撑与单支撑

经常会有客户咨询合富源机电小编:行星减速机双支撑和行星减速机单支撑是什么意思?接下来富源机电小编就为大家讲解一下行星减速机双支撑和行星减速机单支撑。1、行星减速机双支撑和行星减速机单支撑的含义行星减速机双支撑和行星减速机单支撑指的是齿轮的…

Xcode11 后Appdelegate自定义UIWindow对象失败详解。

在Xcode11前我们可以在AppDelegate的钩子didFinishLaunchingWithOptions进行自定义UIWindow对象。但是Xcode11后自定义UIWindow会报错无法启动APP。 是因为iOS13中AppDelegate的职责发生了改变: iOS13之前,AppDelegate全权处理App生命周期和UI生命周期&a…

python预测疾病_吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率...

,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有30%的值是缺失的。下面将首先介绍如何处理数据集中的数据缺失问题,然 后 再 利 用 Logistic回 归和随机梯度上升算法来预测病马的生死。准备数据:处理被…

IOS中的事件响应链,事件冒泡机制基本了解

本文主要讲解IOS中事件响应链,即事件冒泡机制。做过web开发的同学应该知道js事件冒泡是从主响应元素一层一层的向父级冒泡事件,在ios亦是如此,但是不同是ios中,如果冒泡链中有一方对事件进行响应处理后会截止后续对冒泡行为不同于…

板子制作_工厂制作风管VS现场制作有什么区别?

一、传统风管与酚醛风管对比中央空调传统送风管道通常内层采用铁皮或玻璃钢,外裹保温材料,最外面用铝箔进行缠绕,这使得送风管重而大、施工安装费工费时、外观差、气密性低、能耗大。传统的风管已不能满足快速增长的市场需求及人们对室内环境…

关于 NODE.js 并行线程 worker_threads 的使用与详解。

javascript 是单线程,那么node.js属于服务端语言改如何实现其他语言中的并发线程执行呢?在node V10只有 child_process,cluster的API来开启多子进程,多进程。进程并不是子线程,无法内存共享。在nodeV10后引入worker_th…

IOS 多层级路由导航控制器 NavigationControoller 实现路由切换

IOS 导航控制器分为多层级导航控制器naviagtionController 和平行分栏控制器 UITabBar(底部切换栏)。IOS导航控制器是什么呢?其实就是我们web的路由切换功能,只不过在app开发切换是ViewController。 什么是导航控制器 NavigationC…

前端性能优化篇——浏览器同域名并发请求对限制

在浏览器同域名并发请求都产生并发数限制,并发限制通常是4~8以内,那么来了解浏览器请求并发限制的原因和优化手段。浏览器并发数量统计 浏览器为什么要请求并发数限制?在了解优化手段之前我们先了解浏览器限制并发请求的原因1.对操…

帧大小超过交换机mtu_交换机的三种交换方式

交换机是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输,交换机的传输模式…

前端性能优化篇——浏览器http同域名并发请求对限制

在浏览器同域名并发请求都产生并发数限制,并发限制通常是4~8以内。那么我们将来了解浏览器请求并发限制的原因和优化手段。 浏览器并发数量统计 浏览器为什么要请求并发数限制? 在了解优化手段之前我们先了解浏览器限制并发请求的原因 1.对操…

二元函数洛必达求极限_洛必达法则的几个例子

洛必达法则(LHpitals rule)是在一定条件下通过分子分母分别求导再求极限来确定未定式值的方法。 插入一个八卦: 据说洛必达法则是富二代洛必达买来的。喜欢搞数学却苦无天分的贵族洛必达用三百个里弗尔(一里弗尔相当于一磅银子)成功地从伯努力手里买到了这个定理。因此17世…

React-Native 获取设备当前网络状态 NetInfo

react-native 应用获取设备网络状态可以使用 NetInfo 包进行获取。 NetInfo NetInfo 模块可以获取设备当前的联网状态,可以订阅和一次性获取网络状态。以前在react-native集成,现在已经单独移到 react-native-community 社区管理。 安装(IOS需要pod in…

javascript V8引擎垃圾收集机制

V8引擎使用的垃圾收集机制是标记清除,那么javascript在垃圾收集会阻塞其他程序执行。V8引擎使用了增量标记的方式进行优化 增量标记 V8不是直接对整个栈堆遍历标记,而是标记一部分堆后回复正常执行。下次GC将从上一次停止对位置继续进行标记。这样允许在…

rstudio的数据集怎么建立和保存_这个40M的小工具助你在windows下处理数据如虎添翼...

使用windows系统时,如何获取一个大小为1M的文件的行数呢?一般是选择用excel或notepad等软件打开文件,然后查看最后一行的行号,那如果是想快速获取一个大小为1G的文件的行数呢?或是想快速获取100个大小为1M的文件的行数…

mongo 唯一约束索引_Java:MySQL 基础知识+索引相关

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。注:本文转载自网络,不代表本平台立场,仅供读者参考&…

Javascript性能优化【内联缓存】 V8引擎特性

javascript 是单线程、动态类型语言,那么我们在编码时候如何编写性能最优代码呢?下面将讲解V8引擎的内联优化。利用内联缓存这个特性我们可以编写更加优秀的代码。 什么是内联缓存 引用官方的描述:内联缓存(Inline caching&#…

bootstrap 垂直居中 布局_CSS3 flex 布局必须要掌握的知识点

flex 布局已经流行好久了,从最开始大家都在用非官方标准的 box 布局(display: box; display: -webkit-box;),到后来的各种兼容写法,再到后来基本上就是只用 flex 了。毕竟标准就是标准,虽然有时候会迟到,但是最终肯定还…