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会自动添加缺失的行,即使在我们没有意识到有缺失行的问题时.

以上为第二章的学习内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值