GUI:Tkinter(一)

Tkinter文档

一,Tkinter基本流程

1. 创建应用程序主窗口对象

from tkinter import *
window = Tk()
window.mainloop()#开启主循环

2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。

btn = Button(window)

3. 通过几何布局管理器,管理组件的大小和位置

btn.pack()

4. 事件处理 : 通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

btnQuit = Button(self,text="退出",command=self.master.destroy)

 二,类与对象的角度使用Tkinter

import tkinter as tk

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

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

 

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

其中,Application 继承tk.Frame控件,初始化函数后super().__init__(master)将master传入tk.Frame父类中,其中,master为主窗口(或者上一级窗口)。接下来将Application放在主窗口中(self.pack()),再调用create_widgets()创建其他控件。

包装器(pack)

包装器是 Tk 的形状管理机制之一。 形状管理器用于指定部件在容器内的相对位置——彼此的 宿主 关系。与更为麻烦的 定位器 相比(不太常用,这里不做介绍),包装器可接受定性的相对关系—— 上面 、左边 、填充 等,并确定精确的放置坐标。

fred.pack()                     # defaults to side = "top"
fred.pack(side="left")
fred.pack(expand=1)

 包装器参数设置

anchor

锚点类型。 表示包装器要放置的每个从属组件的位置。

expand

布尔型,0 或 1 。

fill

合法值为:'x' 、'y' 、'both' 、'none'

ipadx 和 ipady

距离值,指定从属部件每一侧的内边距。

padx 和 pady

距离值,指定从属部件的外边距。

side

合法值为:'left'、 'right' 、 'top'、 'bottom'

 

 

def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

关于控件参数设置 

1.字典型设置参数

self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

2.关键词设置参数

 self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)

3.利用config()方法设置参数

fred.config(fg="red", bg="blue")

三, 部分控件的使用

1.Button类

在Button类中,我们一般看重text和command参数,text为该控件的显示内容,command为控件绑定的事件,当然,也不能忘了将控件绑在窗口上。

所以,一般地讲,一个按键的基本形式为

 btnQuit = Button(self,text="退出",command=self.master.destroy)

2.Label类

Label(标签)主要用于显示文本信息,也可以显示图像。

以下是label控件常见的一些属性

1. width,height: 用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字宽度占 2 个字符位置,高度和英文字符一样);如果显示是图像,则以像素为单位。默认值是 根据具体显示的内容动态调整。

2. font 指定字体和字体大小,如:font = (font_name,size)

3. image: 显示在 Label 上的图像,目前 tkinter 只支持 gif 格式。

4. fg 和 bg fg(foreground):前景色、bg(background):背景色

5. justify 针对多行文字的对齐,可设置 justify 属性,可选值"left", "center" or "right"

label01 = Label(self,text="Hello",width=10,height=2,bg="black",fg="white")

3.Entry类

Entry用来接收一行字符串的控件。如果用户输入的文字长度长于Entry控件的宽度时, 文字会自动向后滚动。

from tkinter import *
from tkinter import messagebox


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

    def createWidget(self):
        self.label01 = Label(self,text="用户名")
        self.label01.pack()
        self.v1 = StringVar()
        self.v1.set("ashto")
        self.entry01 = Entry(self,textvariable=self.v1)
        self.entry01.pack()
        self.label02 = Label(self,text="密码")
        self.label02.pack()
        self.v2 = StringVar()
        self.entry02 = Entry(self,textvariable=self.v2,show="*")
        self.entry02.pack()
        self.btnQuit = Button(self,text="登录",command=self.login)
        self.btnQuit.pack()

    def login(self):
        usrname = self.v1.get()
        pwd = self.v2.get()
        print("用户:",usrname)
        print("密码:",pwd)
        if usrname == "Ashto" and pwd == "123456":
            messagebox.showinfo(Message, "欢迎登录")
        else:
            messagebox.showinfo(Message,"用户不存在在!")





if __name__ == '__main__':
    window = Tk()
    window.title("登录gui")
    window.geometry("400x200+100+100")
    app = Application(master=window)
    window.mainloop()

4.RadioButton类

from tkinter import *
from tkinter import messagebox


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

    def createWidget(self):
        self.v1 = StringVar()
        self.v1.set("M")

        self.r1 = Radiobutton(self,text="男",value="M",variable=self.v1)
        self.r2 = Radiobutton(self,text="女",value="F",variable=self.v1)
        self.r1.pack(side="left")
        self.r2.pack(side="left")




if __name__ == '__main__':
    window = Tk()
    window.title("表单gui")
    window.geometry("500x200+100+100")
    app = Application(master=window)
    window.mainloop()

对于Radiobutton而言,重点关注value与variable参数就可以了,value表示选中该控件得到的值,而variable为绑定在该控件上的变量,控件获取到的值返回给该变量。我们通过StringVar来构造变量,同样地,我们可以通过IntVar,DoubleVar,BooleanVar来分别构造其他变量。 

  

5.CheckButton类

from tkinter import *
from tkinter import messagebox


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

    def createWidget(self):

        self.v1 = IntVar()
        self.v2 = IntVar()
        self.c1 = Checkbutton(self,text="睡觉",variable=self.v1,onvalue=1,offvalue=0)
        self.c2 = Checkbutton(self,text="吃饭",variable=self.v2,onvalue=1,offvalue=0)
        self.c1.pack(side="left")
        self.c2.pack(side="left")
        Button(self,text="确定",command=self.confirm).pack(side="left")

    def confirm(self):
        if self.v1.get() == 1:
            messagebox.showinfo("Test","睡觉有益健康")
        if self.v2.get() == 1:
            messagebox.showinfo("Test","吃饭有益健康")



if __name__ == '__main__':
    window = Tk()
    window.title("表单gui")
    window.geometry("500x200+100+100")
    app = Application(master=window)
    window.mainloop()

onvalue为选中返回值,offvalue为未选中返回值。 

6.Canvas类

self.canvas = Canvas(self,width=300,height=200,bg="green")

self.canvas可以调用方法来生成各种图形

 

关于其他的方法可以自行阅读文档或者ctrl+左键类名查看函数文档。

四,关于其他

 

关于Tk类

Misc 和 Wm 派生出子类 Tk,它代表应用程序的主窗口。一般应用程序都需要直接或间接 使用 Tk。 

Tk类继承自Misc和Wm两个父类

Misc 和 Wm: Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:

Misc:它是所有组件的根父类

Wm:它主要提供了一些与窗口管理器通信的功能函数。 

以上仅举例,了解更多可以继续阅读wm父类的函数文档。 

    def destroy(self):
        """Destroy this and all descendants widgets. This will
        end the application of this Tcl interpreter."""
        for c in list(self.children.values()): c.destroy()
        self.tk.call('destroy', self._w)
        Misc.destroy(self)
        global _default_root
        if _support_default_root and _default_root is self:
            _default_root = None

关闭主窗口,该方法为Tk所有。

通过Tkinter文档,我们可以得到一些Tk对象的属性:

color

可在 rgb.txt 文件中以颜色名的形式给出,或是 RGB 字符串的形式,4 位 :"#RGB" ,8 位 :"#RRGGBB",12 位:"#RRRGGGBBB",16 位:"#RRRRGGGGBBBB",其中R、G、B 为合法的十六进制数值。 详见 Ousterhout 书中的第 160 页。

cursor

可采用 cursorfont.h 中的标准光标名称,去掉 XC_ 前缀。 比如要获取一个手形光标(XC_hand2),可以用字符串 "hand2"。也可以指定自己的位图和掩码文件作为光标。参见 Ousterhout 书中的第 179 页。

distance

屏幕距离可以用像素或绝对距离来指定。像素是数字,绝对距离是字符串,后面的字符表示单位:c 是厘米,i 是英寸,m 是毫米,p 则表示打印机的点数。例如,3.5 英寸可表示为 "3.5i"

font

Tk 采用一串名称的格式表示字体,例如 {courier 10 bold}。正数的字体大小以点为单位,负数的大小以像素为单位。

geometry

这是一个 widthxheight 形式的字符串,其中宽度和高度对于大多数部件来说是以像素为单位的(对于显示文本的部件来说是以字符为单位的)。例如:fred["geometry"] = "200x100"。

justify

合法的值为字符串: "left" 、 "center" 、 "right" 和 "fill" 。

region

这是包含四个元素的字符串,以空格分隔,每个元素是表示一个合法的距离值(见上文)。例如:"2 3 4 5" 、 "3i 2i 4.5i 2i" 和 "3c 2c 4c 10.43c" 都是合法的区域值。

relief

决定了组件的边框样式。 合法值包括:"raised"、 "sunken" 、"flat" 、"groove" 和 "ridge" 。

scrollcommand

这几乎就是带滚动条部件的 set() 方法,但也可是任一只有一个参数的部件方法。

wrap:

只能是以下值之一:"none" 、 "char" 、 "word"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值