利用Python tkinter进行简单的GUI编程

版权声明:本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/Changcheng2017/article/details/82415703#commentBox

1.创建窗体及窗体的常用属性

import tkinter  #导入tkinter库
Window_Root = tkinter.Tk()  # 创建窗体
# 窗体的常用属性:
Window_Root.title('Hello tkinter!')  # 设置窗体名称
Window_Root.geometry('300x200')  # 设置窗体尺寸,注意中间为小写x
Window_Root.resizable(width=False, height=True)  # 设置窗口是否可以变化长、宽,true为可以改变,false为不可以
'''
在窗体中创建各种控件
'''
Window_Root.mainloop()  # 保持窗体打开


2.控件的常用布局
tkinter提供了三种布局方式:
- pack()
- grid()
- place()
三种布局方式不能在同一窗体中混合使用。

  • pack()是比较简单的布局方式,默认为自上而下进行布局,常用的引用格式为:
Window_Root.Widget_1.pack(fill = ,  # 组件填充方向:X(水平方向填充)、Y(垂直方向填充)、BOTH(水平和垂直)、NONE(默认,不向任何方向填充)
                          side = ''# 组件对齐方式:left、right、top、bottom
                          expand = ''# yes/no 若fill选项为BOTH,则填充父组件的剩余空间。默认为不展开
              anchor = ''# 当可用空间大于所需求的尺寸时,决定组件被放置于容器的何处:N、E、S、W、NW、NE、SW、SE、CENTER(默认值为CENTER)

-grid()是比较简单的布局方式,默认为自上而下进行布局,常用的引用格式为:

Window_Root.Widget_1.grid(row= ,  # 指定行序号
                          column = ,  # 指定列序号
                          sticky = ''# 设置组件在父系中的对齐方式
                          rowspan = ,  # 设置控件所跨越的行个数
                          columnspan = )  # 设置控件所跨越的列个数
                          '''
              通常可以拿gird()搭配循环模块进行多行控件的代码简化,如:
              colours = ['red', 'green', 'orange', 'white']
              r = 0
                          for c in colours:
                              tkinter.Label(text=c, relief='ridge', width=20).grid(row=r, column=0)
                  r = r + 1

-place()通过直接指定控件左上角坐标来放置控件,但是不同分辨率下可能会导致错位。常用的引用格式为:

Window_Root.Widget_1.place(x = ,  # 指定x轴的绝对坐标(相对于整个窗体)
                           y = ,  # 指定y轴的绝对坐标(相对于整个窗体)
                           relx = ,  # 指定相对于父对象的相对坐标x
                           rely = )  # 指定相对于父对象的相对坐标y
                           ###  注意,相对坐标和绝对坐标不能同时使用


3.控件 - Label

Label_1 = tkinter.label(master = ,   # master指定该控件的父容器
                        ### 标签文本
                        test = ''# label所显示的文本,静态
                        textvariable = ,  # label所显示的动态文本,内容赋值不同而不同
                        '''
                        动态文本的赋值方式:
                        VAR = bla,bla,bla  # 动态变量
                        str_obj_1 = tkinter.StringVar()
                        str_obj_1.set(f'{VAR}')  # 格式化引用VAR或直接引用字符串''
                        textvariable = str_obj_1
                        '''
                        font = '',  # 指定字体,从系统字体库来
                        justify = ''# 文本对齐方式:center(默认),left,right
                        foreground  = ''# 字体颜色,可直接指定英文名,如white,red,也可指定RGB格式
                        anchor = ''# 文本在内容区的位置:n,s,w,e,ne,nw,sw,se,center  
                        ### 标签内容区
                        height = ,  # label高度
                        weight = ,  # label宽度
                        padx = ,  # label内容区与右边框的间隔大小,int类型
                        pady = ,  # label内容区与上边框的间隔大小,int类型
                        background = ''# label内容区背景色,可直接指定英文名,如white,red,也可指定RGB格式
                        ### 标签边框
                        relief = ''# 边框的样式:flat(默认),sunken,raised,groove,ridge,如要设置边框,则边框宽度不应为0
                        borderwidth = ,  # label边框的宽度    
                        ### 标签中插入图片,应为gif,ppm/pgm或bmp位图格式
                        image = image_1,  # 插入指定的图片
                        compound = ""# 控制图片与文本的位置:None表示只显示图像,不显示文本;bottom/top/left/right,表示图片显示在文本的下/上/左/右;center,表示文本显示在图片中心上
                        '''
                        插入指定路径的图片:
                        image_1 = TKinter.PhotoImage(file = "gif 、ppm/pgm图片路径")
                        image_1 = TKinter.BitmapImage(file = "bmp位图片路径")
                        ''' 
                        ### 其它
                        state = ''# 指定该控件的状态,默认为normal,另有:activite,disable可指定 
                        cursor = ''# 指定光标移动至该控件上的形状:arrow、circle、clock、cross、dotbox、exchange、fleur、heart、heart、man、mouse、pirate、plus、shuttle、sizing、spider、spraycan、target、star、tcross、trek、watch


4.控件 - Button
Button的指令与Label相似,只不过多了一个命令:command=函数名。该命令通常可以和自定义函数搭配使用,如:

def hello():
    print('hello button')
Window_Root = tkinter.Tk()
Button_1 = tkinter.Button(master=Window_Root, text='Print Hello Button', command=hello).pack()
Window_Root.mainloop()


5.控件 - Entry
Entry()用于制作单行文本框,需要注意的是,Entry()中text属性是无效的,若要在Entry()中预先就输入好文本,需要使用textvariable。如果希望输进Entry()的字符是自定义的,如输密码时的暗码,可使用show=”进行规定。
若我们想将通过Entry()输入的值赋给一个变量,则可以采取以下方式:

v = tkinter.StringVar()  # 定义一个字符变量作为容器v
entry_1 = tkinter.Entry(Window_Root, textvariable=v)  # 将通过Entry()输入的内容赋值给容器v
value = v.get()  # 从容器v中提取内容并将其给予一个新容器value


6.控件 - Frame
Frame的作用是创造一个形状为矩形的父类,作为容器承装其它控件,多用于实现不同类控件间的分组。

frame_1 = Frame(master=, OPTIONS,。。。)  # Frame的用法与其它控件类似


7. 控件- Checkbutton
Checkbutton用于对一个陈述进行Yes或No的选择,基本用法与上述类似,但是额外多了对勾选动作的指令:

  • command = ,指定勾选后执行的函数
  • onvalue = ,指定checkbutton处于勾选状态时的值,通常取1
  • offvalue = ,指定checkbutton处于非勾选状态时的值,通常取0
  • variable = ,指定跟踪checkbutton状态的变量
    下面是一个用checkbutton执行自定义函数的例子:
def act_selection:
    if var_1.get() == 1:
        label_1.config(text = 'WOW!!!!!!!Me tooooooooo!')
    else:
        label_1.config(text = 'Too bad, you shall lose a good guy....')
var_1 = tkinter.IntVar()
check_iflikeme = tkinter.Checkbutton(master=Window, text='Do you like me?',\
                         variable=var_1, onvalue=1, offvalue=0,\
                         command=act_selection).pack()
window.mainloop()                        

另外还有一些工具:

check_button.select()  # 默认选中
check_button.deselect()  # 默认无法选中


8. 控件 - Radiobutton
Radiobutton是用于执行多选一的控件,用法与checkbutton相似,但是要为每一个选项指定触发后的动作,并且需要用value=跟踪每个check通常使用command自定义函数触发。

### 在选项较多的情况下,可以使用for语句为每个选项定义触发标志:
text_RaB = ['Red', 'Blue', 'yellow']
index_RaB = [1234]
def print_color:
    if value == 1:
        print(text_RaB[0])
    elseif value == 2:
        print(text_Rab[1])
    elseif value == 3:
        print(text_Rab[2])
    else :
        print(text_Rab[3])

for color, index in text_RaB, index_RaB:
    Window_Radiobutton = tkinter.Radiobutton(master=None,text=color, value=index, command=print_color).pack()


9.控件 - Combobox
Combobox建立一个简易的下拉列表,这个菜单没有label,可以为菜单中的选项设置动作,通常与事件绑定使用。

# 定义一个用来与每个选项相对应的函数,并以*arg作为可变参数
def show_msg(*arg) :
    print('Your favorite fruit is:', Windows_Combobox.get())  # Windows_Combobox.get()为从选中的选项中提取内容

# 定义Combobox控件:
fruits_name = tkinter.StringVar()  # 设置一个类型为字符串的变量,用来作为空容器准备盛放Combobox选中项
Windows_Combobox = tkinter.Combobox(master=Window_Root, textvariable=fruits_name)  # 设置Combobox,并以空容器fruits_name作为下拉选项名称
Windows_Combobox['values'] = ['Apple''Banana''Pitch']  # 给下拉选项命名,填充空容器
Windows_Combobox.bind("<<ComboboxSelected>>", show_msg)  # 将选中下拉菜单中的某一选项作为事件,与show_msg绑定在一起:当选中任何一项时,触发函数show_msg
Windows_Combobox.pack()


10.控件 - Menu
Menu是一个成熟的下拉菜单,可以为该菜单指定标签。通过创建一个Menu实例,将Name.add_command与top.config(menu=Name)相结合可以在顶层创建一个下拉菜单。可以采用command指定选中每个选项的动作,也可以通过绑定事件来执行函数。menu不需要进行布局操作。

def hello():
    if value == 1:
        print()
    elif value == 2:
        print()
    else:
        print()
Index = (1, 2, 3)
Item = ('Apple', 'Banana', 'Pitch')
menubar = tkinter.Menu(master)  # 在master下创建下拉菜单
for i, name in Index, Item  # 为下拉菜单的label赋值
    menubar.add_command(label=name, value=i)
master.config(menu=menubar)  #显示master中的menu

menubar.bind("<<MenuSelected>>", hello)  # 绑定函数

猜你喜欢

转载自blog.csdn.net/Changcheng2017/article/details/82415703