python GUI --tkinter基础学习1

python GUI—tkinter学习

一、基础–建立主窗口

  • 建立主窗口: root=Tk() from tkinter import *

  • 主窗口位置和大小:

    geometry('wxh+x+y')

    'w’代表宽度,‘h’代表高度,中间隔着字母x,+x代表距离屏幕左边距离,+y代表距离屏幕上边的距离

from tkinter import *
root=Tk()
root.title('我的窗口')
root.geometry('500x300+120+200')
root.mainloop()

默认窗口位置:root.geometry('500x300')


二、面向对象进行GUI编程

经典的GUI 程序的写法,使用面向对象的方式:

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    '''继承至frame框架'''

    def __init__(self, master=None):
        super().__init__(master)  # 初始化frame构造器
        self.master = master
        self.pack()
        self.createWidget()


    def createWidget(self):
        '''创建组件'''
        self.btn01 = Button(self)
        self.btn01.pack()
        self.btn01['text'] = "请点击"
        self.btn01['command'] = self.songhua
        # 创建一个退出按钮
        self.btnquit=Button(self,text='退出',command=root.destroy)  # destroy退出整个程序
        self.btnquit.pack()

    def songhua(self):
        print('123')
        messagebox.showinfo("送花", "送很多花") #第一个参数是弹出的窗口名称


root = Tk()
root.geometry("400x100+200+400")
root.title("GUI经典测试")
app = Application(master=root)
root.mainloop()

这是一个框架,可以当作是一个模板,后续的程序都基于这个框架


三、Label标签

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

Label标签常见属性

  1. width,height

    若显示的是文本,则以单个英文字符为单位(一个汉字宽度占两个字符,高度占一个字符),若显示的是图像,则以像素为单位。默认值是根据具体显示的内容动态调整。

  2. font

    font=(font_name,size) 指定字体和字体大小

  3. image

    显示在Lable上的图像,目前只支持gif格式

  4. fg和bg

    fg:foreground(前景色) bg:background(背景色)

  5. justify

    可设置"center",“left”,“right”

    使用这个框架做测试,以后的label都写在createWidgt部分

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    '''继承至frame框架'''

    def __init__(self, master=None):
        super().__init__(master)  # 初始化frame构造器
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        '''创建组件'''
        pass


if __name__ == "__main__":
    root = Tk()
    root.geometry("400x300+200+400")
    root.title("GUI经典测试")
    app = Application(master=root)
    root.mainloop()

test1:测试单行文字

 def createWidget(self):
        self.label01=Label(text="这是标签测试1",width=15,height=2,fg="white",bg="blue",font=("黑体",12))
        self.label01.pack()

test2:测试图片标签

    def createWidget(self):
        global image
        image = PhotoImage(file=r'C:\Users\32409\Desktop\0eb30f2442a7d933b0b7b483a14bd11373f00126[1].gif')
        self.label02 = Label(self,image=image)
        self.label02.pack()

注意要把image声明为全局变量,若为局部变量,本方法执行完毕后图片对象销毁,窗口不会显示图片

test03:测试多行文本

    def createWidget(self):
       self.label03 = Label(self,text="这是在测试多行文本\n这里我想用到对齐命令\n我还想设置边界",borderwidth=2,
                            relief='solid',justify='center',font=("黑体",12))
       self.label03.pack()

relief:指定组件的3D效果,比如RAISED表示组件内部相对于外部凸起

label不要拼成了lable

options 选项详解

通过前面的Label组件,我们可以通过Options设置组件的属性,从而能够控制组件各种状态,如字体、颜色、高度,宽度等等。

这里我们可以通过三种方式来设置Options选项,这在各种GUI组件中用法都是一致的。

  1. 创建对象时,使用关键字参数

    fred=Button(self,fg="red",bg="blue")
    
  2. 创建对象后使用字典索引方式

    fred['fg']="red"
    fred['bg']="blue"
    
  3. 创建对象后,使用config()方法

    fred.config(fg="red",bg="blue")
    
    activebackground1.设置当Label处于活动状态(通过state选项设置状态)的背景色 2.默认值由系统指定
    activeforeground1.设置当Label处于活动状态(通过state选项设置状态)的前景色 2.默认值由系统指定
    anchor1.控制文本(或图像)在Label中显示位置 2.N,NE,E,SE,S,SW,W,NW,或VENTER来定位(EWSN代表东西南北,上北下南左西右东) 3.默认值是CENTER
    background1.设置背景颜色 2.默认值由系统指定
    bg和background一样
    bitmap1.指定显示到Label上的位图 2.如果指定了image选项,则该选项被忽略
    borderwidth1.指定Label的边框宽度 2.默认值由系统指定,通常是1或2像素
    bd跟borderwidth一样
    compound1.控制Label中文本和图像的混合模式 2.默认情况下,如果有指定位图或图片,则不现实文本 3.如果该选项设置为CENTER,文本显示图像上(文本重叠图像) 4.如果该选项设置为BOTTOM,LEFT,RIGHT或TOP,那么图像显示在文本的旁边(如:BOTTOM,则图像在文本的下方) 5.默认值是NONE
    cursor1.指定当鼠标Label上飘过时候的鼠标的样式 2.默认值由系统指定
    disableforeground1.指定当Label不用的时候前景色的颜色 2.默认值由系统指定
    font1.指定Label中文本的字体 2.一个Label只能设置一种字体 3.默认值由系统指定
    foreground1.设置Label的文本和位图的颜色 2.默认值由系统指定
    fg和foreground一样
    height1.设置Label的高度 2.如果Label显示的是文本,那么单位是文本单元 3.如果Label显示的是图像,那么单位是像素或屏幕单元 4.如果设置为0或者干脆不设置,那么会自动根据Label的内容计算出高度
    highlightbackgroun d1.指定当Label如果获得焦点的时候高亮边框的颜色 2.默认值由系统指定,通常是标准的背景颜色
    highlightcolor1.指定当Label获得焦点的时候的高亮边的颜色 2.默认值由系统指定
    highlightthickness1.指定高亮边的宽度 2.默认值是0(不带高亮边框)
    image1.指定Label显示的图片 2.该值应该是PhotoImage,BitmapImage,或者兼容的对象 3.该选项优先于text和bitmap选项
    justify1.定义如何对其对行文本 2.使用LEFT,RIGHT或者CENTER 3.注意,文本的位置取决于anchor选项 4.默认值是CENTER
    padx1.指定Label水平方向上的额外间距(内容和边框间) 2.单位是像素
    pady1.指定Label垂直方向上的额外间距(内容和边框间) 2.单位是像素
    relief1.指定边框样式 2.默认值是FLAT 3.另外你还可以设置SUNKEN,RAISED,GROOVE或者GIDGE
    state1.指定Label的状态 2.这个标签控制Label显示 3.默认值是NORMAL 4.另外你还可以设置ACTIVE或者DISABLED
    takefocus1.如果是True,该Label接收输入焦点 2.默认值是False
    text1.指定Label显示的文本 2.文本可以包含换行符 3.如果设置了bitmap或者image选项,该选项则被忽略
    textvariable1.Label显示Tkinter变量(通常是一个StringVar变量)的内容 2.如果变量被修改,Label的文本会自动更新
    underline1.跟text选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键) 2.默认值是-1 3.例如设置为1,则说明在Button的第2个字符处画下划线
    width1.设置Label的宽度 2.如果Label显示的是文本,那么单位是文本单元 3.如果Label显示是图像,那么单位是像素或者像素单元 4.如果设置为0或者干脆不设置,那么会自动根据Label内容计算出宽度
    wraplength1.决定Label的文本应该为分成多少行 2.该选项指定每行的宽度,单位是屏幕单元 3.默认值是0

四、按钮组件

按钮组件里面的详细参数可以参考按钮组件options


五、Entry单行文本框

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

var1 = StringVar()
var1.set("password")
self.entry1 = Entry(self, textvariable=var1,show='*')

show这个参数的意思是在entry框中输入的东西会以*方式显示

StringVar是tkinter中的一个变量

在这里插入图片描述

六、Text 多行文本框

Text主要是用于显示多行文本,还可以显示网页链接,图片,HTML页面,等等。IDLE就是用Text组件构成的。

def createWidget(self):
    self.text=Text(self,height=15,width=20)
    self.text.pack()
    self.text.insert(INSERT,"光标处插入")
    self.text.insert(END,"结尾处插入")
    print(self.text.get(1.1,1.4))

tip:INSERT,END之类的大写时不用加双引号,如果换成小写则需要加上

self.text.get(1.1,1.4) 包头不包尾,意思是获取第一行第二列到第一行第四列的文本,注意:行从第一行开始,列从第0列开始

插入图片

# 此处将photo变量变为该类的属性也是一样的,方法同设置photo为全局变量
self.photo=PhotoImage(file=r'C:\Users\32409\Desktop\20120821174423_mUYaz.thumb.700_0[1].gif')
self.text.image_create(INSERT,image=self.photo)
self.text.delete(1.2,'end')  

通过tag精确的处理指定的文本

self.text.insert(INSERT,"this is only a text")
self.text.tag_add('test',1.0,'end')
self.text.tag_config('test',background='yellow',foreground="red")

在这里插入图片描述

这里tag_add的意思是把需要单独处理的文本做上一个标记,如“text”,后面的参数表示处理的范围,tag_config是把做上标记的部分进行处理

    def createWidget(self):
        self.text=Text(self,height=20,width=10)
        self.text.pack()

        self.text.insert(INSERT,"百度网址")
        self.text.tag_add('test',1.0,'end')
        self.text.tag_config('test',underline=True) #设置下划线
        self.text.tag_bind("test",'<Button-1>',self.webshow)

    def webshow(self,event):
        webbrowser.open("https://www.baidu.com")

注意使用webbrowser.open()方法需要导入内置的库:import webbrowser

下篇文章地址:https://blog.csdn.net/qq_44670367/article/details/100606468


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值