Python标准库中的Tkinter模块


Python自带支持Tk的Tkinter,无需安装任何包,就可以直接使用。Tkinter封装了访问Tk的接口,Tk是一个图形库,支持多个操作系统,使用Tcl语言开发。Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。

        先看例子:

#file  tkintertest.py
#python  自带的图形界面学习
import  tkinter  as  tk
import  tkinter.messagebox  as  messagebox

class  Application(tk.Frame):
        def  __init__(self,  master=None):
                super().__init__(master)
                self.pack()
                self.createWidgets()

        def  createWidgets(self):
                self.nameInput  =tk.Entry(self,bg='yellow')
                self.nameInput.pack(padx=20,pady=30)
                self.helloLabel  =  tk.Label(self,  text='你好,世界!',bg='pink',fg='green')
                self.helloLabel.pack(side="top")
                self.alertButton  =  tk.Button(self,  text='你好',  command=self.hello)
                self.alertButton.pack()
                self.quitButton  =  tk.Button(self,  text='退出',  fg='red',command=root.destroy)
                self.quitButton.pack(side="bottom")
                li          =  ['C','python','php','html','SQL','java']
                movie    =  ['CSS','jQuery','Bootstrap']
                self.listb    =  tk.Listbox(self)                    #    创建两个列表组件
                self.listb2  =  tk.Listbox(self)
                for  item  in  li:                                  #  第一个小部件插入数据
                        self.listb.insert(0,item)

                for  item  in  movie:                            #  第二个小部件插入数据
                        self.listb2.insert(0,item)

                self.listb.pack(side="left")                                        #  将小部件放置到主窗口中
                self.listb2.pack(side="right")

        def  hello(self):
                name  =  self.nameInput.get()  or  '世界'
                messagebox.showinfo('Message',  '你好,  %s  !'  %  name)

root=tk.Tk()
app  =  Application(master=root)
#  设置窗口标题:
app.master.title('你好,世界!')
app.master.maxsize(1000,400)

#  主消息循环:
app.mainloop()


        一、控件
  
        Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
目前有15种Tkinter的部件

        控件                  描述
Button              按钮控件;在程序中显示按钮。
Canvas              画布控件;显示图形元素如线条或文本
Checkbutton    多选框控件;用于在程序中提供多项选择框
Entry                输入控件;用于显示简单的文本内容
Frame                框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label                标签控件;可以显示文本和位图
Listbox            列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton      菜单按钮控件,由于显示菜单项。
Menu                  菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message            消息控件;用来显示多行文本,与label比较类似
Radiobutton    单选按钮控件;显示一个单选的按钮状态
Scale                范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar        滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text                  文本控件;用于显示多行文本
Toplevel          容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox            输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow    是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame      是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox  用于显示你应用程序的消息框。

        二、布局
      
        1、pack()

        pack()有以下几个常用属性:side、padx、pady、ipadx、ipady、fill、expand

        1.1、side
        side属性有四个可选值:'top'、'bottom'、'left'、'right',分别表示将控件位置设在窗口顶部中心、底部中心、左边中心、右边中心。side默认值为'top'。

        1.2、padx、pady、ipadx、ipady
        这四个属性分别设置控件水平方向外边距、竖直方向外边距、水平方向内边距、竖直方向内边距。

        1.3、fill
        fill属性有四个可选值:'none'、'x'、'y'、'both'。分别表示不填充、将控件沿水平方向填充、将控件沿竖直方向填充、将控件沿水平和竖直方法填充。
        当side属性被设为'top'、'bottom'时,fill只能沿水平方向填充;当side属性被设为'left'、'right'时,fill只能沿竖直方向填充。

        1.4、expand
        expand属性有两个可选值:0、1(或者'yes'、'no')。expand默认值为0。
        当expand属性为0时,前面所说的side、fill一切正常;当expand属性为1时,side属性无效,此时控件会在窗口中心位置,且fill既可沿水平方向填充,也可沿竖直方向填充。

        2、grid()

        grid()有以下几个常用属性:row、column、padx、pady、ipadx、ipady、rowspan、columnspan、sticky

        2.1、row、column

        grid()将窗口看做一张表格,将控件放在其中的单元格中,而row、column则用来设置控件所在单元格的坐标。
例如:
#file:tkintertest2.py
import  tkinter  as  tk
window  =  tk.Tk()
window.title('tkinter测试')
window.geometry('400x400')

btn1  =  tk.Button(window,text='按钮一',width=5,bg='green')
btn1.grid(row=0,column=0,rowspan=1,columnspan=2,sticky='W'+'N'+'S'+'E')

btn2  =  tk.Button(window,text='按钮二',width=5,height=5,bg='red')
btn2.grid(row=0,column=2)

btn3  =  tk.Button(window,text='按钮三',width=3,height=3,bg='blue')
btn3.grid(row=1,column=1)

btn4  =  tk.Button(window,text='按钮四',width=15,height=10,bg='yellow')
btn4.grid(row=1,column=2)

window.mainloop()

        单元格的宽度、高度是由同一列中最宽、同一行中最高的控件的宽高决定的。

        2.2、padx、pady、ipadx、ipady

        这四个属性分别设置控件水平方向外边距、竖直方向外边距、水平方向内边距、竖直方向内边距。

        2.3、rowspan、columnspan

        有时候,一个控件可能会占用不止一个单元格,这时就要用到rowspan、columnspan,他们的作用与合并单元格类似。
rowspan=3表示该控件会在竖直方向占用3行单元格;column=3则报表时该控件会在水平方向占用3列单元格。

        2.4、sticky

        sticky属性用于设置控件的对齐方式,其可选值有'N'、'S'、'E'、'W'以及这四个值的各种组合。

        当stick属性的值为这四个方向中的一个时,控件会向相应方向对齐;当stick属性的值为其中两个时,控件会向相应的一个角对齐;当stick属性的值为其中三个、四个时,控件会先向前两个设定的方向对齐,然后向后两个方向进行填充。

        3、place()

        place()有以下几个常用属性:x、y、relx、rely、anchor

        3.1、x、y
        x、y属性用来设置控件的绝对坐标。

        3.2、relx、rely
        relx、rely属性用来设置控件的相对坐标,范围为0-1。
        可以同时使用相对坐标和绝对坐标,此时先根据相对坐标确定控件位置,然后根据绝对坐标使控件进行偏移,最后确定控件的最终位置。

        3.3、anchor
        anchor属性有9个可选值,分别表示9个方向,用来设置控件的锚点。
        NW,    N,    NE
        W,CENTER,E
        SW,    S,    SE
        例如,anchor='nw',x=100,y=100表示控件的左上角将在坐标(100,100)处,而anchor='n',x=100,y=100表示控件的顶边中点将在坐标(100,100)处。

        4、Frame()

        Frame()本身是tkinter中的一类控件,用来帮助我们进行布局。
 

猜你喜欢

转载自blog.csdn.net/www_rsqdz_net/article/details/79798935