python创建按钮_(一)Python GUI 创建及添加部件

1 开始创建Python GUI

实现代码:

1 importtkinter as tk2 win =tk.Tk()3 win.title("Python GUI")4 win.mainloop()

运行结果:

1209131-20200222112440068-758672877.png

工作原理:

#1 导入tkinter模块并简化命名为tk。

#2 创建Tk类的一个实例并赋给实例变量win。

#3 根据实例变量win的title属性定义窗口的标题。

#4 通过调用mainloop开启窗口。

[注1]:运用Python类(class),首先需要创建一个类的实例,然后将实例赋给一个变量,此变量便具有与该类相同的功能属性。

[注2]:mainloop让GUI处于等待外部事件的无限循环中,当调用此循环后GUI窗口才会显示在屏幕上。

2 禁止GUI窗口尺寸变动

实现代码:

1 importtkinter as tk2 win =tk.Tk()3 win.title("Python GUI")4 win.resizable(0, 0)5 win.mainloop()

运行结果:用户无法更改GUI窗口尺寸,窗口最大化按钮呈灰色无法使用。

1209131-20200222100103016-650932515.png

工作原理:

#4 resizable()是Tk类的一个方法,参数(0, 0)阻止窗口尺寸变更(通过传递其它参数可以实现自定义窗口初始尺寸)。

3 添加Label标签并设置其文本属性

实现代码:

1 importtkinter as tk2 from tkinter importttk3 win =tk.Tk()4 win.title("Python GUI")5 ttk.Label(win, text="A Label").grid(column=0, row=0)6 win.mainloop()

运行结果:

1209131-20200222112539115-1756168659.png

工作原理:

#2 从tkinter中导入ttk模块(tkinter的扩展,包含更高级的控件使窗口更加美观化)。

#5 向ttk.Label()传递窗口实例win并设置其文本属性(标签显示内容),启用网格管理器设置标签显示位置坐标。

[注1]:相较前面窗口,此窗口尺寸变小。原因是当窗口中没有添加控件时,tkinter会使用默认尺寸;当添加控件时,tkinter会在满足定义控件正常显示的前提下,选择尽可能小的窗口尺寸。

4 添加Button按钮并设置其文本属性

实现代码:

1 importtkinter as tk2 from tkinter importttk3

4 win =tk.Tk()5 win.title("Python GUI")6

7 #adding a label

8 aLabel = ttk.Label(win, text="A Label")9 aLabel.grid(column=0, row=0)10

11 defclickMe():12 action.configure(text="** I have been Clicked! **")13 aLabel.configure(foreground='red')14

15 #adding a button

16 action = ttk.Button(win, text="Click Me!", command=clickMe)17 action.grid(column=1, row=0)18

19 win.mainloop()

运行结果:

点击按钮前:

1209131-20200222112320896-1477350702.png

点击按钮后:

1209131-20200222112251808-1977417582.png

工作原理:

#11 事件处理函数,用于响应按钮,执行对标签和按钮文本属性的更改设置。

#16 创建按钮控件,并设置命令为clickMe()函数以及其文本属性。

5 添加text box文本框控件

实现代码:

1 importtkinter as tk2 from tkinter importttk3

4 win =tk.Tk()5 win.title("Python GUI")6

7 #adding a label

8 aLabel = ttk.Label(win, text="Enter a name:")9 aLabel.grid(column=0, row=0)10

11 defclickMe():12 action.configure(text='Hello~' +name.get())13

14 #adding a button

15 action = ttk.Button(win, text="Click Me!", command=clickMe)16 action.grid(column=1, row=1)17

18 #adding a textbox entry widget

19 name =tk.StringVar()20 nameEntered = ttk.Entry(win, width=12, textvariable=name)21 nameEntered.grid(column=0, row=1)22

23 win.mainloop()

运行结果:

初始窗口:

1209131-20200222152018043-1209796989.png

文本框输入Python并点击按钮后窗口:

1209131-20200222152140628-1594582574.png

工作原理:

#12 获取文本框字符并将其设置为按钮显示文本。按钮点击事件是一个回调函数,当按钮被用户点击后,此函数中涉及变量将被系统识别。基于此原理,点击按钮后即可获取文本框输入字符。

#19 声明变量名name为适用于tkinter的StringVar()类型。

#20 创建文本框并设置宽度以及绑定文本框字符变量为name。

#21 设置文本框显示位置坐标。

[注1]:Python是一种动态类型语言,是从所赋给变量的值来推断变量的类型。例如,在给一个变量名赋值一个字符串后,此变量即成为字符串类型。

[注2]:在tkinter中,必须声明变量名为StringVar()类型后才能正确使用,这是因为tkinter与Python并不是同一种语言,我们这里只是在Python中进行调用而已。

6 设置光标cursor和禁用GUI控件

添加代码:

1 nameEntered.focus()2 action.configure(state='disabled')

运行结果:

1209131-20200222160418557-1522321032.png

1209131-20200222160653515-2048760134.png

工作原理:

#1 通过调用tkinter控件实例的focus()方法给文本框设置光标。

#2 设置按钮状态属性以禁用按钮功能。

7 combo box组合框控件

添加代码:

1 ttk.Label(win, text="Choose a number:").grid(column=1, row=0)2 number =tk.StringVar()3 numberChosen = ttk.Combobox(win, width=12, textvariable=number)4 numberChosen['values'] = (1, 2, 4, 42, 100)5 numberChosen.grid(column=1, row=1)6 numberChosen.current(0)

运行结果:

1209131-20200222170752020-1545117541.png

工作原理:

#3 创建一个组合框控件,并设置其宽度和文本变量。

#4 设置下拉菜单中待选内容。

#5 设置组合框位置坐标。

#6 设置组合框默认显示内容。

修改代码:

1 numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')2 defclickMe():3 action.configure(text='Hello~' + name.get() + ' ' + numberChosen.get())

运行结果:

1209131-20200222180742636-1621088812.png

工作原理:

#1 实现用户只能选择输入下拉菜单中内容,无法输入自定义内容。

#3 按钮文本显示文本框和组合框输入内容。

8 创建不同初始状态下checkbutton

添加代码:

1 #creating three checkbuttons

2 chVarDis =tk.IntVar()3 check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state="disabled")4 check1.select()5 check1.grid(column=0, row=4, sticky=tk.W)6

7 chVarUn =tk.IntVar()8 check2 = tk.Checkbutton(win, text="Unchecked", variable=chVarUn)9 check2.deselect()10 check2.grid(column=1, row=4, sticky=tk.W)11

12 chVarEn =tk.IntVar()13 check3 = tk.Checkbutton(win, text="Enabled", variable=chVarEn)14 check3.select()15 check3.grid(column=2, row=4, sticky=tk.W)

运行结果:

1209131-20200223123620994-1056706497.png

工作原理:

#2 声明变量名chVarDis为适用于tkinter的IntVar()类型。

#3 创建检查按钮。第一个参数为检查按钮放置的所在控件;第二个参数为检查按钮显示标签的文本内容;

#3 第三个参数为按钮的状态变量,将其与定义的IntVar()类型变量绑定。因为检查按钮的状态(checked or unchecked)由0和1表示,故将#2中变量定义为IntVar()类型。

#4 通过调用select()方法在检查按钮前放置检查符号√。

#5 设置检查按钮放置位置坐标,并将sticky设为tk.W(表示按钮将以左对齐方式显示)。

#9 通过调用deselect()方法在检查按钮前取消放置检查符号√。

9 radio button单选按钮控件

添加代码:

1 #radiobuttons globals

2 COLOR1 = "Blue"

3 COLOR2 = "Gold"

4 COLOR3 = "Red"

5

6 #radiobutton callback

7 defradCall():8 radSel=radVar.get()9 if radSel == 1: win.configure(background=COLOR1)10 elif radSel == 2: win.configure(background=COLOR2)11 elif radSel == 3: win.configure(background=COLOR3)12

13 #create three radionbuttons

14 radVar =tk.IntVar()15 rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall)16 rad1.grid(column=0, row=5, sticky=tk.W)17

18 rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)19 rad2.grid(column=1, row=5, sticky=tk.W)20

21 rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)22 rad3.grid(column=2, row=5, sticky=tk.W)

运行结果:

1209131-20200223143643433-520999623.png

1209131-20200223143650653-928287454.png

1209131-20200223143700350-1067641329.png

工作原理:

#2/3/4 创建模块级全局变量,在创建单选框按钮和设置背景颜色时用到。

#7 回调函数,根据用户选择设置窗口背景颜色。

#14 声明变量名radVar为适用于tkinter的IntVar()类型,为三个单选按钮所共用。

#15-22 创建三个单选按钮,设置按钮标签显示内容,绑定按钮变量,设置数值及命令等。

10 scrolled text滚动文本框控件

实现代码:

1 from tkinter importscrolledtext2

3 #Using scrolled text control

4 scrolW = 30

5 scrolH = 3

6

7 scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)8 scr.grid(column=0, columnspan=3)

运行结果:

1209131-20200223160748003-2142198406.png

1209131-20200223161550081-1411342192.png

工作原理:

#1 导入包含滚动文本框控件的模块。

#4/5 设置滚动文本框控件的高度和宽度。

#7 创建滚动文本框控件,设置宽度和高度,并设置文本自动换行。

#8 通过设置columnspan=3使得滚动文本框将占用三列空间,而不是全部位于第一列。

11 将几个控件添加到循环中

实现代码:

1 #change radiobuttons global variables into a list

2 colors = ["Blue", "Gold", "Red"]3

4 radVar =tk.IntVar()5 radVar.set(99)6

7 for col in range(3):8 curRad = 'rad' +str(col)9 curRad = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)10 curRad.grid(column=col, row=5, sticky=tk.W)11

12 defradCall():13 radSel=radVar.get()14 if radSel == 0: win.configure(background=colors[0])15 elif radSel == 1: win.configure(background=colors[1])16 elif radSel == 2: win.configure(background=colors[2])

运行结果:

1209131-20200223165118837-110369412.png

工作原理:

#2 创建一个列表来表示这几个全局变量。

#5 设置一个单选按钮之外的初始值(0~2之外的数值),否则在默认情况下,当窗口出现的同时将有一个单选按钮被选中。

#7 将三个单选按钮的创建和位置设置用一个for循环来实现。

#12 相应地修改回调函数中的索引号和背景颜色设置。

未完待续……

本文章属于原创作品,欢迎大家转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:躬耕南阳 https://www.cnblogs.com/yangmi511/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值