python gui设计 tkinter菜鸟编程_Python GUI——tkinter菜鸟编程(中)

8. Radiobutton

选项按钮:可以用鼠标单击方式选取,一次只能有一个选项被选取。Radiobutton(父对象,options,…)

常用options参数:anchor,bg,bitmap,bd,command,cursor,fg,font,height,highlightbackground、highlightcolor,image,justify,padx,pady,state,text,textvariable,underline,width,wraplength;

activebackground:鼠标光标放在选项按钮上时的背景色彩;

activeforeground:鼠标光标放在选项按钮上时的前景色彩;

indicatoron:当此值为0时,可以建立盒子选项按钮;

selectcolor:当选项按钮被选取时的颜色;

selectimage:如果设置图像选项按钮时,可由此设置当选项按钮被选取时的不同图像;

value:选项按钮的值,可以区分所选取的选项按钮;

variable:设置或取得目前选取的单选按钮,通常为IntVar或StringVar类型。var IntVar

rb1 = Radiobutton(root,...,variable=var,value=x1,...)

rb2 = Radiobutton(root,...,variable=var,value=x2,...)

...

rbn = Radiobutton(root,...,variable=var,value=xn,...)

使用get()方法,可以传回所选选项的参数value的值,使用set()可以设置初始默认value选项。

8.1 示例

defprintSelection():

label.config(text= "You are a" + var.get() + ".")

root=Tk()

root.title("Ex")

var=StringVar()

var.set("boy")

label= Label(root, text = "Please choose.", bg = "lightyellow", width = 30)

label.pack()

rbman= Radiobutton(root, text = "boy", variable = var, value = "boy", \

command=printSelection)

rbman.pack()

rbwoman= Radiobutton(root, text = "gril", variable = var, value = "gril", \

command=printSelection)

rbwoman.pack()

root.mainloop()

8.2 字典

cities = {0:"北京", 1:"哈尔滨", 2:"天津", 3:"西安", 4:"杭州"}defprintSelection():print(cities[var.get()])

root=Tk()

root.title("Ex")

var=IntVar()

var.set(0)

label= Label(root, text = "选择最喜欢的城市", bg = "lightyellow", width = 30)

label.pack()for val, city incities.items():

Radiobutton(root, text= city, variable = var, value =val, \

command=printSelection).pack()

root.mainloop()

8.3 盒子选项按钮Radiobutton(…, indicatoron = 0, width = 30)

9. Checkbutton

复选框,可以复选。Checkbutton(父对象,options,…)

options:…(通用参数)

offvalue:控制变量,复选框未勾选时value的值,默认为0;

onvalue:控制变量,复选框勾选时value的值,默认为1。

cities = {0:"北京", 1:"哈尔滨", 2:"天津", 3:"西安", 4:"杭州"}defprintInfo():

selection= ""

for i incheckboxes:if checkboxes[i].get() ==True:

selection+= cities[i] + "\t"

print(selection)

root=Tk()

root.title("Ex")

label= Label(root, text = "选择喜欢的城市", bg = "lightyellow", width = 30)

label.pack()

checkboxes={}for i inrange(len(cities)):

checkboxes[i]=BooleanVar()

Checkbutton(root, text= cities[i], variable =checkboxes[i]).pack()

Button(root, text= "确定", width = 10, command =printInfo).pack()

root.mainloop()

10. 容器

Frame可译为框架,LabelFrame即标签框架。

10.1 FrameFrame(父对象,options,…) #父对象可以省略

options参数:bg,bd,cursor,height,highlightbackground,highlightcolor,highlighthickness,relief,width。

root =Tk()

root.title("Ex")

frameUpper= Frame(root, bg = "lightyellow", height = 30, width = 150)

frameUpper.pack()

btnRed= Button(frameUpper, text = "Red", fg = "red").pack(side =LEFT)

btnGreen= Button(frameUpper, text = "Green", fg = "green").pack(side =LEFT)

frameLower= Frame(root, bg = "lightblue", height = 30, width = 150)

frameLower.pack()#btnPurple = Button(frameLower, text = "Purple", fg = "purple").pack()

root.mainloop()

10.2 LabelFrameLabelFrame(父对象,options,…)bg,bd,cursor,font,height,highlightbackground,highlightcolor,highlighthickness,labelAnchor,relief,text,width。labf = LabelFrame(root, text = "选择喜欢的城市")

checkboxes = {}

for i in range(len(cities)):

checkboxes[i] = BooleanVar()

Checkbutton(labf, text = cities[i], variable = checkboxes[i]).pack()

labf.pack()

10.3 Toplevel

功能类似于Frame,但是这个控件所产生的容器有一个独立的窗口,有自己的标题栏和边框。可以制作对话框。bg,bd,cursor,fg,font,height,width。

importrandom

root=Tk()

root.title("Ex")

msg= {1:"Yes", 2:"No", 3:"Exit"}defMessageBox():

msgType= random.randint(1,3)

labTxt=msg[msgType]

tl=Toplevel()

tl.geometry("300x180")

tl.title("Message Box")

Label(tl, text= labTxt, bg = "lightgreen").pack(fill = BOTH, expand =True)

btn= Button(root, text = "Click Me", command =MessageBox)

btn.pack()

root.mainloop()

11. 与数字有关

11.1 Scale

用过移动尺度条产生某一范围的数字。Scale(父对象,opitons,…)activebackground,bg,bd,command,cursor,fg,font,highlightbackground,highlightcolor,relief,state,width;

digits:数值尺度,读取时需使用IntVar、DoubleVar、StringVar变量类型读取;

from_:尺度条范围值的初值;

label:便签文字,默认没有;

length:默认100像素;

orient:可设置HORIZONTAL或VERTICAL,默认水平;

repeatdelay:可设置需要按住尺度条多久后才能移动此尺度条,单位是ms,默认值300;

resolution:分辨率,数值间隔;

showvalue:正常会显示尺度条的当前值,设为0以不显示;

takefocus:正常时此尺度条可以循环取得焦点,设为0则无法取得焦点;

tickinterval:尺度条的标记刻度分隔;

to:尺度条范围值的终值;

troughcolor:槽的色彩;

variable:设置或取得目前的尺度值。

使用3个尺度条更改窗口背景色彩:

defbgUpdate(source):"""更改窗口背景色彩"""red=rSlider.get()

green=gSlider.get()

blue=bSlider.get()#转换为十六进制

myColor = "#%02x%02x%02x" %(red, green, blue)

root.config(bg=myColor)

root=Tk()

root.title("Ex")

root.geometry("360x240")

rSlider= Scale(root, from_ = 0, to = 255, label = "R", \

resolution= 1, troughcolor = "red", command =bgUpdate)

gSlider= Scale(root, from_ = 0, to = 255, label = "G", \

resolution= 1, troughcolor = "green", command =bgUpdate)

bSlider= Scale(root, from_ = 0, to = 255, label = "B", \

resolution= 1, troughcolor = "blue", command =bgUpdate)

rSlider.pack(anchor= S, side =LEFT)

gSlider.pack(anchor= S, side =LEFT)

bSlider.pack(anchor= S, side =LEFT)

root.mainloop()

11.2 askcolor()

tkinter模块的colorchoose模块中有askcolor()方法,利用此方法可以开启“色彩”对话框。

from tkinter.colorchooser import *

defbgUpdate():"""更改窗口背景色彩"""myColor=askcolor()

root.config(bg= myColor[1])

root=Tk()

root.title("Ex")

root.geometry("360x240")

btn= Button(text = "Slect color", command =bgUpdate).pack()

root.mainloop()

11.3 Spinbox

数值输入。Spinbox(父对象,options,…)activebackground,bg,bd,command,disablebackground,disableforeground,fg,font,justify,relief,state,textvariable,width;

format:格式化的字符串;

from_:范围值的初值;

increment:每次点击up/down按钮的增量;

repeatdalay:可以单击up/down的时间间隔,单位是ms,默认300;

values:可以是元组或其他序列值;

to:范围的终值;

wrap:单击up/down可以让数值重新开始;

xscrollcommand:在x轴使用滚动条。

defprintInfo():print(spin.get())

root=Tk()

root.title("Ex")

root.geometry("300x100")

spin= Spinbox(root, from_ = 10, to = 30, increment = 2, \

command=printInfo)

spin.pack()

root.mainloop()

序列存储:

将数值存储在序列数据中,单击up/down时相当于观察元组或列表中的值。spin = Spinbox(root, values = (10, 30, 170, 100), \

command = printInfo)

也可以存储非数值数据:spin = Spinbox(root, values = ("北京", "哈尔滨", "天津"), \

command = printInfo)

12. 消息提示

12.1 Message

主要用于显示短消息,与Label功能和用法类似,但是使用更加灵活。Message(父对象,options)anchor,bg,bitmap,cursor,fg,font,height,image,justify,padx/pady,relief,text,textvariable,underline,width,wraplength;

aspect:控件宽度与高度比,默认150%。

12.2 Messagebox

tkinter模块内有Messagebox模块,提供了8个对话框:showinfo(title, message):显示一般提示信息;

showwarning(title, message):显示警告信息;

showerror(title, message):显示错误信息;

askquestion(title, message):显示询问消息,传回"yes"或"no";

askokcancel(title, message):显示确定或取消消息,传回True或False;

askyesno(title, message):显示是或否,传回True或False;

askyesnocancel(title, message):显示是或否或取消,传回True或Flase或None;

askretrycancel(title, message):显示重试或取消,传回True或False。

title是对话框的名称,message是对话框内的文字。

defmyMsg():

messagebox.showinfo("My message Box", \"Python Tkinter 早安")

root=Tk()

root.title("Ex")

root.geometry("300x160")

Button(root, text= "Good Morning", command =myMsg).pack()

root.mainloop()

将用户相应传回,在窗口中列出相应的内容。def myMsg():

ret = messagebox.askyesnocancel("My message Box", \

"是或否或取消?")

print(ret)

利用传回值就可以进行进一步的操作。

13. 事件和绑定

其实GUI是一种事件导向的应用程序设计,事件的来源可能是用户单击鼠标,键盘输入或是Widget状态改变,tkinter提供一些机制让我们可以针对这些事件做更进一步的处理,这些处理的方式称为事件处理程序。

13.1 事件绑定

前面介绍的command参数其实就是一种事件绑定,command=callback就是事件处理程序。

在tkinter应用程序中最后一个指令是mainloop(),这个方法是让程序进入事件等待循环,tkinter也提供了为事件绑定处理程序的机制,它的语法为:widget.bind(event, handler)

widget是事件的来源,可以是root窗口对象,或是任意的Widget控件,handler是事件处理程序。

有了以上事件绑定后,就可以自行设计事件绑定效果了。

若是在Button内省略command参数,可以用以下方法重建:btn.bind("", event_handler)

鼠标绑定基本应用:

defcallback(event):print("Clicked at", event.x, event.y)

root=Tk()

root.title("Ex")

root.geometry("300x160")

root.bind("", callback)

root.mainloop()

移动鼠标时在窗口下方显示鼠标目前的坐标:

defmouseMotion(event):

x=event.x

y=event.y

textvar= "Mouse location - x:{}, y:{}".format(x,y)

var.set(textvar)

root=Tk()

root.title("Ex")

root.geometry("300x160")

x, y=0, 0

var=StringVar()

text= "Mouse location - x:{}, y:{}".format(x,y)

var.set(text)

lab= Label(root, textvariable =var)

lab.pack(anchor= S, side = RIGHT, padx = 10, pady = 10)

root.bind("", mouseMotion)

root.mainloop()

defenter(event):

x.set("鼠标进入Exit功能按钮")defleave(event):

x.set("鼠标离开Exit功能按钮")

root=Tk()

root.title("Ex")

root.geometry("300x160")

btn= Button(root, text = "Exit", command =root.destroy)

btn.pack(pady= 30)

btn.bind("", enter)

btn.bind("", leave)

x=StringVar()

lab= Label(root, textvariable = x, bg = "yellow", fg = "blue", \

height= 5, width = 20)

lab.pack(pady= 20)

root.mainloop()

键盘Esc键测试:

defleave(event):

ret= messagebox.askyesno("Exit", "是否离开?")if ret ==True:

root.destroy()else:returnroot=Tk()

root.title("Ex")

root.geometry("300x160")

root.bind("",leave)

lab= Label(root, text = "Esc键测试", bg = "yellow", fg = "blue")

lab.pack(pady= 30)

root.mainloop()

a~z按键测试:

defkey(event):print("按了" + repr(event.char) + "键")

root=Tk()

root.title("Ex")

root.geometry("300x160")

root.bind("",key)

lab= Label(root, text = "a~z键测试", bg = "yellow", fg = "blue")

lab.pack(pady= 30)

root.mainloop()

注意:当事件绑定与Frame有关时,必须在Frame获得焦点时,键盘绑定才可生效。

defkey(event):print("按了" + repr(event.char) + "键")defcoordXY(event):

frame.focus_set()print("鼠标坐标:", event.x, event.y)

root=Tk()

root.title("Ex")

root.geometry("300x160")

frame= Frame(root, width = 100, height = 100, bg = "blue")

frame.bind("",key)

frame.bind("", coordXY)

frame.pack()

lab= Label(frame, text = "a~z键测试", bg = "yellow", fg = "blue")

lab.pack(padx= 30, pady = 30)

root.mainloop()

13.2 取消绑定boj.unbind("")

通过复选框控制是否绑定:

defbuttonClicked(event):print("I like tkinter")deftoggle(onoff):if var.get() ==True:

onoff.bind("", buttonClicked)else:

onoff.unbind("")

root=Tk()

root.title("Ex")

root.geometry("300x160")

btn= Button(root, text = "tkinter")

btn.pack(anchor= W, padx = 10, pady = 10)

var=BooleanVar()

cbtn= Checkbutton(root, text = "bind/unbind", variable =var, \

command= lambda:toggle(btn))

cbtn.pack(anchor= W, padx = 10)

root.mainloop()

13.3 绑定多个事件处理程序

tkinter也允许我们将一个事件绑定多个事件处理程序,同样是使用bind()方法,但是新增加的事件处理程序需要在bind()方法内增加参数add = "+"。

defbuttonClicked1():print("Command event handler, I like tkinter")defbuttonClicked2(event):print("Bind event handler, I like tkinter")

root=Tk()

root.title("Ex")

root.geometry("300x160")

btn= Button(root, text = "tkinter", command =buttonClicked1)

btn.pack(anchor= W, padx = 10, pady = 10)

btn.bind("", buttonClicked2, add = "+")

root.mainloop()

bind()程序先被执行,command后执行。

13.4 Protocols

Protocols为窗口管理程序与应用程序之间的的通信协议。

单击按钮可以关闭窗口,它的名称是WM_DELETE_WINDOW,使用程序修改此协议,改为单击此按钮后弹出Messagebox,询问结束或取消,若单击确定才会结束此程序。

defcallback():

res= messagebox.askokcancel("Exit", "确定要退出吗?")if res ==True:

root.destroy()else:returnroot=Tk()

root.title("Ex")

root.geometry("300x160")

root.protocol("WM_DELETE_WINDOW", callback)

root.mainloop()

14. Listbox

列表框(Listbox)是一个显示一系列选项的Widget控件,用户可以进行单项或多项的选择。Listbox(父对象,options,…)bg,bd,cursor,fg,font,height,highlightcolor,highlightthickness,relief,width;

listvariable:以变量方式处理选项内容;

selectbackground:被选取字符串的背景色彩;

selectmode:决定有多少个选项可以被选取,以及鼠标拖曳如何影响选项;BROWSE:默认值,可以选择一个选项,如果选取一个选项同时拖曳鼠标,将由鼠标释放的位置决定被选取的选项;

SINGLE:只能选择一个选项,可以用单击方式选取,不可用拖曳方式更改所选的项目;

MULTIPLE:可以选择多个选项,单击项目切换是否选取该项目;

EXTENDED:按住Ctrl可以多选,单击第一个项目然后拖曳到最后一个项目,即可选取这个区间的一系列选项,单击一个选项并按住Shift单击另一个选项可以选取区间项目;

xscrollcommand:在x轴使用滚动条;

yscrollcommand:在y轴使用滚动条。

14.1 insert()

可以使用insert()方法为列表框建立项目。insert(index, element)

index是项目插入位置,如果是在最后面可以使用END。

fruits = ["Banana", "Watermelon", "Pineapple", \"Orange", "Grapes", "Mango"]

root=Tk()

root.title("Ex")

root.geometry("300x160")

lb= Listbox(root, selectmode =MULTIPLE)for fruit infruits:

lb.insert(END, fruit)

lb.pack(pady= 10)

root.mainloop()

14.2 Listbox()基本操作

1. size():传回列表项目的数量print("items数目", lb.size())

2. selection_set():选取特定索引项lb.selection_set(0)

设定初始选取项目为第一个。lb.selection_set(0, 3)

设定初始选取项目为前3个。

3. delete():删除特定索引项lb.delete(0)

lb.delete(0, 3)

4. get():传回指定索引项print(lb.get(0))

5. curselection():传回选取项目的索引

打印所选取的项目。

defcallback():

indexs=lb.curselection()for index inindexs:print(lb.get(index))

fruits= ["Banana", "Watermelon", "Pineapple", \"Orange", "Grapes", "Mango"]

root=Tk()

root.title("Ex")

root.geometry("300x300")

lb= Listbox(root, selectmode =EXTENDED)for fruit infruits:

lb.insert(END, fruit)

lb.pack(pady= 10)

btn= Button(root, text = "Print", command =callback)

btn.pack(pady= 5)

root.mainloop()

6. selection_includes():检查指定索引是否被选取def callback():

print(lb.select_includes(0))

14.3 绑定事件

当Listbox执行选取操作时会产生<>虚拟事件,可以由此设置时间处理程序。

当选择Listbox中的项目时,在上方列出所选的项目:

defitemSelected(event):

obj=event.widget

index=obj.curselection()

var.set(obj.get(index))

fruits= ["Banana", "Watermelon", "Pineapple", \"Orange", "Grapes", "Mango"]

root=Tk()

root.title("Ex")

root.geometry("300x300")

var=StringVar()

lab= Label(root, text = "", textvariable =var)

lab.pack(pady= 5)

lb= Listbox(root, selectmode =SINGLE)for fruit infruits:

lb.insert(END, fruit)

lb.pack(pady= 10)

lb.bind("<>", itemSelected)

root.mainloop()

14.4 增删项目示例

Entry是输入控件,可以输入项目名称,输入完成后单击“增加”按钮可以将此项目加入Listbox,同时Entry被清空。若是选择Listbox内的项目后单击“删除”,就可以从Listbox删除所选项目。

defitemAdded():

varAdd=entry.get()if len(varAdd.strip()) ==0:returnlb.insert(END, varAdd)

entry.delete(0, END)defitemDeleted():

index=lb.curselection()if len(index) ==0:returnlb.delete(index)

root=Tk()

root.title("Ex")

entry=Entry(root)

entry.grid(row= 0, column = 0, padx = 5, pady = 5)

btnAdd= Button(root, text = "增加", width = 10, command =itemAdded)

btnAdd.grid(row= 0, column = 1, padx = 5, pady = 5)

lb=Listbox(root)

lb.grid(row= 1, column = 0, columnspan = 2, padx = 5, pady = 5, stick = W)

btnDel= Button(root, text = "删除", width = 10, command =itemDeleted)

btnDel.grid(row= 2, column = 0, padx = 5, pady = 5, stick = W)

root.mainloop()

14.5 项目排序

defitemSorted():

listTmp=list(lb.get(0, END))

sortedList= sorted(listTmp, reverse =var.get())

lb.delete(0, END)for item insortedList:

lb.insert(END, item)

fruits= ["Banana", "Watermelon", "Pineapple", \"Orange", "Grapes", "Mango"]

root=Tk()

root.title("Ex")

lb=Listbox(root)for fruit infruits:

lb.insert(END, fruit)

lb.pack(padx= 10, pady = 5)

btn= Button(root, text = "排序", command =itemSorted)

btn.pack(side= LEFT, padx = 10, pady = 5)

var=BooleanVar()

cb= Checkbutton(root, text = "倒序", variable =var)

cb.pack(side=LEFT)

root.mainloop()

14.6 拖曳项目

defgetIndex(event):

lb.index= lb.nearest(event.y) #目前选项的索引

defdragJob(event):

newIndex=lb.nearest(event.y)

x=lb.get(lb.index)

lb.delete(lb.index)

lb.insert(newIndex, x)

lb.selection_set(newIndex)

lb.index=newIndex

fruits= ["Banana", "Watermelon", "Pineapple", \"Orange", "Grapes", "Mango"]

root=Tk()

root.title("Ex")

lb=Listbox(root)for fruit infruits:

lb.insert(END, fruit)

lb.bind("", getIndex)

lb.bind("", dragJob) #拖曳动作

lb.pack(padx = 10, pady = 5)

root.mainloop()

14.7 Scrollbar

在默认的情况下Listbox是没有滚动条的,如果选项太多将造成部分选项无法显示,此时可将滚动条Scrollbar加入Listbox。

另外,滚动条也可以应用在Text和Canvas控件上。Scrollbar(父对象,options,…)bg,bd,cursor,orient,width;

activebackground:当光标经过滚动条时,滚动条和方向箭头的色彩;

command:滚动条移动时所触发的方法;

elementborderwidth:滚动条和方向箭头的外部宽度,默认为1;

highlightbackground;

highlightcolor:当滚动条获得焦点时的色彩;

highlightthickness;

jump:默认为0,每次拖曳滚动条都会触发command方法,如果设为1则只有放开鼠标时才会触发command方法;

repeatdalay:设置按住滚动条移动的停滞时间,单位是ms,默认值300;

takefocus:正常可以用Tab键的方式切换滚动条成为焦点,设为0可以取消此设置;

troughcolor:滚动条色槽的颜色。

root =Tk()

root.title("Ex")

scrollbar=Scrollbar(root)

scrollbar.pack(side= RIGHT, fill =Y)#将Listbox与滚动条做连动

lb = Listbox(root, yscrollcommand =scrollbar.set)for i in range(50):

lb.insert(END,"Line" +str(i+1))

lb.pack(side= LEFT, fill = BOTH, expand =True)

scrollbar.config(command=lb.yview)

root.mainloop()

15. OptionMenu

下拉式列表,用户可以从中选择一项。OptionMenu(父对象,var,*value)

其中*value是一系列下拉列表。

使用set可以建立默认选项。

root =Tk()

root.title("Ex")

root.geometry("250x100")

omTuple= ("Python", "Matlab", "C")

var=StringVar()

var.set("Python")

optionmenu= OptionMenu(root, var, *omTuple)

optionmenu.pack()

root.mainloop()

同样,使用get()可以获取所选选项。

16. Combobox

组合框,tkinter.ttk中的控件,特性与OptionMenu类似,是Entry与下拉菜单的组合。Combobox(父对象,options)textvariable:可以设置Combobox的变量值;

value:Combobox的选项内容,以元组方式存在。

使用current()设置默认选项。

from tkinter.ttk import *root=Tk()

root.title("Ex")

root.geometry("250x100")

var=StringVar()

cb= Combobox(root, textvariable =var)

cb["value"] = ("Python", "Matlab", "C")

cb.current(0)

cb.pack()

root.mainloop()

当Combobox中的选项有变动时,会产生<>虚拟事件,可以用此特性绑定事件处理方法。

17. PanedWindow

面板,可以在此容器内建立任意数量的子控件。PanedWindow(父对象,options,…)bg,bd,borderwidth,cursor,height,orient(默认HORIZONTAL),relief(默认FLAT),width;

handlepad:面板显示宽度,默认为8;

handlesize:面板显示大小,默认为8;

sashcursor:分割线光标;

sashrelief:面板分割线外框,默认RAISED;

showhandle:滑块属性,可设定是否显示。

17.1 add()

使用add(child, options)可以插入子对象。

root =Tk()

root.title("Ex")

pw= PanedWindow(orient =VERTICAL)

pw.pack(fill= BOTH, expand =True)

top= Label(pw, text = "Top Pane")

pw.add(top)

bottom= Label(pw, text = "Bottom Pane")

pw.add(bottom)

root.mainloop()

17.2 LabelFrame子对象

常见的应用是将PanedWindow分成两三份,然后可以将所设计的控件适度分配位置。

root =Tk()

root.title("Ex")

pw= PanedWindow(orient =HORIZONTAL)

pw.pack(fill= BOTH, expand =True)

leftframe= LabelFrame(pw, text = "Left Pane", width = 120, height = 150)

pw.add(leftframe)

rightframe= LabelFrame(pw, text = "Right Pane", width = 100, height = 150)

pw.add(rightframe)

root.mainloop()

使用ttk中的weight参数可以设置更改窗口大小时各个对象缩放的比例,都设为1以同比例缩放。from tkinter.ttk import *

pw.add(leftframe, weight = 1)

pw.add(rightframe, weight = 1)

18. Notebook

tkinter.ttk中的控件。

也是一个容器控件,它的特点是可以有许多选项卡,当选择不同选项卡时可以看到不同的子控件内容。Notebook(父对象,options)height,width;

padding:设置Notebook外围的额外空间,可以设置4个数值代表left、top、right、bottom。

使用Notebook()建立框架的步骤如下:建立Notebook对象,名为notebook;

调用add子方法插入子对象并添加选项卡add(子对象, text = "xxx");

正常add(子对象, options).

options:compound:设置当选项卡内同时含 图像和文字时,彼此之间的位置关系;

image:选项卡以图像方式 呈现;

padding:设置面板的额外空间;

state:默认normal,设为disable表示无法使用,设为hidden表示隐藏;

sticky:指出子窗口面板的配置方式,n/s/e/w;

text:选项卡中的字符串内容;

underline。

from tkinter import *

from tkinter.ttk import *

defmsg():

messagebox.showinfo("Notebook", "欢迎使用Notebook")

root=Tk()

root.title("Ex")

root.geometry("300x160")

notebook=Notebook(root)

frame1=Frame()

frame2=Frame()

label= Label(frame1, text = "Tkinter")

label.pack(padx= 10, pady = 10)

btn= Button(frame2, text = "Help", command =msg)

btn.pack(padx= 10, pady = 10)

notebook.add(frame1, text= "标签页1")

notebook.add(frame2, text= "标签页2")

notebook.pack(padx= 10, pady = 10, fill = BOTH, expand =True)

root.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TkinterPython语言的一个标准GUI库,可以用来创建各种图形界面应用程序。它是Python内置的库,无需额外安装。Tkinter提供了一系列的组件,如按钮、标签、文本框等,以及各种布局管理器,如Grid布局和Pack布局等,供开发者使用。 对于初学者来说,菜鸟编程PDF对于学习Tkinter非常有帮助。它通过简单明了的语言和大量实例代码,帮助读者快速入门并掌握Tkinter的基础知识和常用功能。 首先,这本PDF会介绍Tkinter的基本概念和使用方法,并通过一些简单的示例代码展示Tkinter的基本功能,帮助读者了解如何创建窗口、添加组件、设置布局等。 其次,该PDF还会详细介绍Tkinter常用的组件,如按钮、标签、文本框等,并通过示例代码展示了它们的基本用法和常见功能。 此外,菜鸟编程的这本PDF还会介绍Tkinter的事件处理和布局管理器等高级内容。事件处理可以让用户与程序进行交互,响应用户的操作,而布局管理器可以帮助开发者更方便地设置和调整界面的布局。 总的来说,这本菜鸟编程Tkinter PDF提供了丰富的例子和简单易懂的教程,对于想学习Python GUI编程的初学者来说,是一本非常好的指南。读者可以通过这本PDF快速入门Tkinter,并掌握基本的GUI开发技巧,为以后的项目开发打下良好的基础。 ### 回答2: Python GUI设计是使用Python编程语言开发图形用户界面(GUI)的过程。其TkinterPython内置库之一,提供了快速和简单的方法来创建GUI应用程序。 Tkinter的优势之一是它易于学习和使用。大部分用户只需要一些基本的Python知识,就能够开始使用Tkinter创建GUI应用程序。此外,Tkinter提供了丰富的控件(如按钮、文本输入框、列表框等),可以轻松地实现各种功能。 对于初学者来说,使用Tkinter创建GUI应用程序具有很高的可扩展性和灵活性。我们可以通过自定义控件的外观和行为,使应用程序更符合我们的需求。此外,Tkinter提供了丰富的布局管理器,可以帮助我们轻松地调整和排列控件。 编写图形用户界面时,我们通常需要处理用户的输入和操作。Tkinter提供了丰富的事件处理机制,可以捕获和响应用户的各种操作。我们可以编写相应的事件处理函数,根据用户的操作来更新界面和执行相应的逻辑。 最后,Tkinter提供了对像素级别的控制,可以使用绑定到特定控件的回调函数来实现对控件进行自定义的操作。这使得我们能够更加深入地控制应用程序的外观和行为。 总的来说,Python GUI设计使用Tkinter可以帮助我们快速、简单地创建各种GUI应用程序。即使对于刚开始学习的菜鸟编程者来说,也可以通过掌握基本的Tkinter知识,轻松地创建自己想要的GUI应用程序。 ### 回答3: 《Python GUI设计 Tkinter菜鸟编程 PDF》是一本以Python编程语言为基础,教授如何使用Tkinter库进行图形用户界面(GUI)设计的电子书。TkinterPython一个内建的GUI库,它提供了一系列的组件和工具,使开发者能够轻松创建交互式的桌面应用程序。 这本PDF适合初学者或者菜鸟级别的编程者,它详细介绍了Tkinter库的基础知识和使用方法。读者可以通过学习这本书,了解如何使用Tkinter创建窗口、标签、按钮、文本框等常见的GUI组件,并将它们进行布局和设计,从而构建一个完整的用户界面。 这本书还介绍了一些高级的Tkinter技巧和功能,如使用事件处理机制实现交互性、添加图像和多媒体文件、使用缩放和滚动条控制部件等。读者将学会如何将这些技巧应用于自己的项目,以便创建出更具吸引力和实用性的应用程序。 总的来说,这本《Python GUI设计 Tkinter菜鸟编程 PDF》是一本适合初学者的指南,它帮助读者快速入门GUI设计,并教授如何使用Tkinter库创建各种交互性强、功能丰富的应用程序。无论是想要开发一个小型工具还是一个全功能的应用程序,都可以从这本书获取到所需的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值