GUI图形用户界面编程(tkinter的基础上)

一。常用的GUI库

1.Tkinter

2.wxPython(较流行,适用于大型应用程序开发)‘

3.PyQT(适合大型GUI程序编程)

基于tkinter模块创建GUI程序步骤

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

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

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

4.事件处理

通过绑定事件处理程序,响应用户操作所触发的事件

tkinter主窗口

主窗口位置和大小

通过geometry(’wxh\pmx\pmy‘)(注意:标红的是英文字母x)进行设置。w为宽度,h为高度,

+x表示距屏幕左边的距离,-x表示距屏幕右边的距离;+y表示距屏幕上边的距离,-y表示距屏幕下边的距离。

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

常见属性:

1.width、height 用于指定区域大小。

        1.显示文本时,以英文字符为单位大小,汉字占两个字符。

        2.显示图像时,以像素大小为单位

2.font(用于指定字体和字体大小)font=(font-name,size)

3.image(显示在Label上的图像)

4.fg和bg(前景色和背景色)

5.justify 针对多行文字的对齐

 

 

 按键选项汇总

 

 

 

 Entry单行文本框

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

界面效果(登录界面的创建)

 

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master) #显示调用父类的构造器
        self.master = master
        self.pack()
        self.creatWidget()

    def creatWidget(self):
        self.labe01 = Label(self, text="用户名")
        self.labe01.pack()
        v1 = StringVar()
        self.entry01 = Entry(self, textvariable=v1)
        self.entry01.pack()
        self.labe02 = Label(self, text="密码")
        self.labe02.pack()
        v2 = StringVar() #创建一个StringVar()对象,用于显示信息
        # 这里显示密码,不能直接显示,应用*来代替密码
        self.entry02 = Entry(self, textvariable=v2, show="*") #将Entry与StringVar()对象进行绑定
        self.entry02.pack()
        self.butn01 = Button(self, text="登录", command=self.login)#绑定事件
        self.butn01.pack()


    def login(self):
        username = self.entry01.get()
        password = self.entry02.get()
        if username == 'karsa' and password == '123456789':
            messagebox.showinfo("使命召唤", "登录成功!!!")
        else:
            messagebox.showinfo("使命召唤", "你的用户名或密码输入错误,登录失败!")


if __name__ == '__main__':
    root = Tk()
    root.geometry('500x300+300+300')
    app = Application(root) #以OOP的方式来创建GUI编程
    root.mainloop()
Text 多行文本框
Text(多行文本框)的主要用于显示多行文本,还可以显示
网页链接,图片,HTML页面,甚至CSS样式表,添加组件
等。因此,也常被当做简单的文本处理器、文本编辑器或者
网页浏览器来使用。比如IDLE就是Text组件构成的。
对Text文本的测试
from tkinter import *
import webbrowser


class Application(Frame):


    def __init__(self, master=None):
        super().__init__(master)  # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()


    def createWidget(self):
        self.w1 = Text(root, width=40, height=12, bg="gray")
        # 宽度 20 个字母(10 个汉字),高度一个行高
        self.w1.pack()
        # self.w1.insert(1.0, "0123456789\nabcdefg")
        # 表示在第一行第0列插入文本
        self.w1.insert(1.0, "0123456789\nabcdefg")
        self.w1.insert(2.3, "锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦\n")
        Button(self, text="重复插入文本",command=self.insertText).pack(side="left")
        Button(self, text="返回文本",command=self.returnText).pack(side="left")
        Button(self, text="添加图片",command=self.addImage).pack(side="left")
        Button(self, text="添加组件",command=self.addWidget).pack(side="left")
        Button(self, text="通过 tag 精确控制文本",command=self.testTag).pack(side="left")


    def insertText(self):

        # INSERT 索引表示在光标处插入
        self.w1.insert(INSERT, ' Gaoqi ')
        # END 索引号表示在最后插入
        self.w1.insert(END, '[sxt]')
        self.w1.insert(1.8, "gaoqi")


    def returnText(self):


        # Indexes(索引)是用来指向 Text 组件中文本的位置,Text 的组件索引也是对应实际字符之间的位置。
        # 核心:行号以 1 开始 列号以 0 开始
        print(self.w1.get(1.2, 1.6))
        print("所有文本内容:\n" + self.w1.get(1.0, END))


    def addImage(self):

        # global photo
        self.photo = PhotoImage(file="tt.gif")
        # END表示在文本末尾添加图片
        self.w1.image_create(END, image=self.photo)


    def addWidget(self):


        b1 = Button(self.w1, text='喜欢')
    # 在 text 创建组件的命令
        self.w1.window_create(INSERT, window=b1)


    def testTag(self):
        self.w1.delete(1.0, END)
        self.w1.insert(INSERT, "good good study,day day up!\n中国\n程序员\n百度,搜一下就知道")
        # Indexes(索引)是用来指向 Text 组件中文本的位置,Text 的组件索引也是对应实际字符之间的位置。
        # 核心:行号以 1 开始 列号以 0 开始
        self.w1.tag_add("good", 1.0, 1.9)
        self.w1.tag_config("good", background="yellow",foreground="red")
        self.w1.tag_add("baidu", 4.0, 4.2)
        # underline设置下划线
    
        self.w1.tag_config("baidu", underline=True)
        self.w1.tag_bind("baidu", "<Button-1>", self.webshow)


    def webshow(self, event):
        # 打开网页一定要使用import webbrowser
        webbrowser.open("https://www.baidu.com/")


if __name__ == '__main__':
    root = Tk()
    root.geometry("450x300+200+300")
    app = Application(master=root)
    root.mainloop()
Radiobutton 单选按钮
Radiobutton 控件用于选择同一组单选按钮中的一个。
Radiobutton 可以显示文本,也可以显示图像。
from tkinter import *
from tkinter import messagebox


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)  # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()


    def createWidget(self):
        self.v = StringVar()
        self.v.set("F")
        # 两个按钮对应同一个变量
        self.r1 = Radiobutton(self, text="男性", value="M",variable=self.v)
        self.r2 = Radiobutton(self, text="女性", value="F",variable=self.v)
        # pack布局pack(side="left") 对齐方式为左对齐
        self.r1.pack(side="left");self.r2.pack(side="left")
        Button(self, text="确定",command=self.confirm).pack(side="left")


    def confirm(self):
        messagebox.showinfo("测试", "选择的性别: "+self.v.get())


if __name__ == '__main__':
    root = Tk()
    root.geometry("400x50+200+300")
    app = Application(master=root)
    root.mainloop()
Checkbutton 复选按钮
Checkbutton 控件用于选择多个按钮的情况。 Checkbutton
可以显示文本,也可以显示图像。
"""测试 Checkbutton 组件的基本用法,使用面向对象的方式"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)  # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):

        # IntVar() 是 Tkinter 中的一个变量类型,它用于储存整型数据。
        self.codeHobby = IntVar(); self.videoHobby = IntVar()
        print(self.codeHobby.get())  # 默认值是 0,当选中后,变为1 onvalue=1, offvalue=0
        # 每个按钮对应不同的变量
        self.c1 = Checkbutton(self, text="敲代码", variable=self.codeHobby, onvalue=1, offvalue=0)
        self.c2 = Checkbutton(self, text="看视频", variable=self.videoHobby, 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.videoHobby.get() == 1:
            messagebox.showinfo("测试", "看视频,都是正常人有的爱好!你喜欢看什么类型?")
        if self.codeHobby.get() == 1:
            messagebox.showinfo("测试", "抓获野生程序猿一只,赶紧送给他一点算法题充饥!!")


if __name__ == '__main__':
    root = Tk()
    root.geometry("400x50+200+300")
    app = Application(master=root)
    root.mainloop()

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值