文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python中Tkinter如何使用

2023-07-02 14:46

关注

本篇内容介绍了“python中Tkinter如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

python中Tkinter如何使用

一、前言

1、Tkinter是什么

二、准备工作

1、Windows演示环境搭建

三、Tkinter创建窗口

1、创建出一个窗口

import tkinter as tk  # 在代码里面导入库,起一个别名,以后代码里面就用这个别名root = tk.Tk()  # 这个库里面有Tk()这个方法,这个方法的作用就是创建一个窗口

如果只是执行以上的两句代码,运行程序是没有反应的,因为只有一个主函数,从上到下执行完就没有了,这个窗口也是很快就消失了,所以现在我们要做的就是让窗口一直显示,那么我们就可以加一个循环

root.mainloop()  # 加上这一句,就可以看见窗口了

执行以上的3句代码,我们就可以看见窗口了
python中Tkinter如何使用
3.2、给窗口取一个

root.title('演示窗口')

python中Tkinter如何使用
3.3、窗口设置

root.geometry("300x100+630+80")  # 长x宽+x*y

python中Tkinter如何使用
3.3、创建按钮,并且给按钮添加点击事件

btn1 = tk.Button(root)
btn1["text"] = "点击"
btn1.pack()  # 按钮在窗口里面的定位
from tkinter import messageboxdef test(e):    messagebox.showinfo("窗口名称","点击成功")
btn1.bind("<Button-1>",test) #第一个参数为:按鼠标左键的事件 第二个参数为:要执行的方法的名字

按钮组件里面有一个方法bind() 这个方法就可以实现绑定

import tkinter as tkfrom tkinter import messageboxroot = tk.Tk()  # 创建窗口root.title('演示窗口')root.geometry("300x100+630+80")  # 长x宽+x*ybtn1 = tk.Button(root)  # 创建按钮,并且将按钮放到窗口里面btn1["text"] = "点击"  # 给按钮一个名称btn1.pack()  # 按钮布局def test(e):    '''创建弹窗'''    messagebox.showinfo("窗口名称", "点击成功")btn1.bind("<Button-1>", test)  # 将按钮和方法进行绑定,也就是创建了一个事件root.mainloop()  # 让窗口一直显示,循环

python中Tkinter如何使用
3.4、窗口内的组件布局

pack 这个布局管理器,要么将组件垂直的排列,要么水平的排列
grid Grid(网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。
选项说明
column单元格的列号,从0开始的正整数
columnspan跨列,跨越的列数,正整数
row单元格的行号, 从0开始的正整数
rowspan跨行,跨越的行数,正整数
ipadx, ipady设置子组件之间的间隔,x方向或y方向,默认单位为像素,非浮点数,默认0.0
padx, pady与之并列的组件之间的间隔,x方向或y方向,默认单位为像素,非浮点数,默认0.0
sticky组件紧贴所在的单元格的某一脚,对应于东南西北中以及4个角。东 = “e”,南=“s”,西=“w”,北=“n”,“ne”,“se”,“sw”, “nw”;
import tkinter as tkroot = tk.Tk()# 默认按钮btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid()print(btn1.grid_info())root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(column=0)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(column=1)root.title('演示窗口')root.geometry("300x100+1000+300")root.mainloop()

python中Tkinter如何使用

类似excel的合并单元格
python中Tkinter如何使用
a占了两个格子的宽度,colunmspan就是2

"pythonimport tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(column=0, columnspan=2)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(column=1, columnspan=1)root.title('演示窗口')root.geometry("300x100+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(row=0)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(row=1)# 按钮3btn3 = tk.Button(root)btn3["text"] = "按钮2"btn3.grid(row=2)root.title('演示窗口')root.geometry("300x100+1000+300")root.mainloop()

python中Tkinter如何使用

类似excel的合并单元格
python中Tkinter如何使用
a占了两个格子的高度,rowspan就是2

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(row=0, rowspan=2)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(row=2, rowspan=1)root.title('演示窗口')root.geometry("300x100+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(ipadx=20)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(ipadx=5)root.title('演示窗口')root.geometry("300x100+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(ipady=20)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(ipady=5)root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(padx=50)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(column=1, padx=20)root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 按钮1btn1 = tk.Button(root)btn1["text"] = "按钮1"btn1.grid(pady=30)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(pady=20)root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

import tkinter as tkroot = tk.Tk()# 默认按钮btn1 = tk.Button(root)btn1["text"] = "默认按钮演示效果"btn1.grid(ipadx=50)# 按钮2btn2 = tk.Button(root)btn2["text"] = "按钮2"btn2.grid(row=1, sticky="w")# 按钮3btn3 = tk.Button(root)btn3["text"] = "按钮3"btn3.grid(row=1, sticky="e")root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

place布局管理器place布局管理器可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景
选项说明
x,y组件左上角的绝对坐标(相当于窗口)
relx ,rely组件左上角的坐标(相对于父容器)
width , height组件的宽度和高度
relwidth , relheight组件的宽度和高度(相对于父容器)
anchor对齐方式,左对齐“w”,右对齐“e”,顶对齐“n”,底对齐“s”
import tkinter as tkroot = tk.Tk()but1 = tk.Button(root, text="按钮1")but1.place(relx=0.2, x=100, y=20, relwidth=0.2, relheight=0.5)root.title('演示窗口')root.geometry("300x150+1000+300")root.mainloop()

python中Tkinter如何使用

四、Tkinter基本控件介绍

1、封装

import tkinter as tk# from tkinter import ttk -下拉选择框class GUI:    def __init__(self):        self.root = tk.Tk()        self.root.title('演示窗口')        self.root.geometry("500x200+1100+150")        self.interface()    def interface(self):        """"界面编写位置"""        passif __name__ == '__main__':    a = GUI()    a.root.mainloop()

2、文本显示_Label

    def interface(self):        """"界面编写位置"""        self.Label0 = tk.Label(self.root, text="文本显示")        self.Label0.grid(row=0, column=0)

3、按钮显示_Button

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="按钮显示")        self.Button0.grid(row=0, column=0)

4、输入框显示_Entry

    def interface(self):        """"界面编写位置"""        self.Entry0 = tk.Entry(self.root)        self.Entry0.grid(row=0, column=0)

5、文本输入框显示_Text

# pack布局    def interface(self):        """"界面编写位置"""        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.pack(pady=0, padx=30)# grid布局    def interface(self):        """"界面编写位置"""        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=1, column=0)

6、复选按钮_Checkbutton

    def interface(self):        """"界面编写位置"""        self.Checkbutton01 = tk.Checkbutton(self.root, text="名称")        self.Checkbutton01.grid(row=0, column=2)

7、单选按钮_Radiobutton

    def interface(self):        """"界面编写位置"""        self.Radiobutton01 = tk.Radiobutton(self.root, text="名称")        self.Radiobutton01.grid(row=0, column=2)

8、下拉选择框_Combobox

def interface(self):        """"界面编写位置"""        values = ['1', '2', '3', '4']        self.combobox = ttk.Combobox(            master=self.root,  # 父容器            height=10,  # 高度,下拉显示的条目数量            width=20,  # 宽度            state='',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...            font=('', 15),  # 字体、字号            textvariable='',  # 通过StringVar设置可改变的值            values=values,  # 设置下拉框的选项            )        self.combobox.grid(padx=150)

9、菜单-主菜单、子菜单

import tkinter as tkfrom tkinter import Menuclass GUI:    def __init__(self):        self.root = tk.Tk()        self.root.title('演示窗口')        self.root.geometry("500x200+1100+150")        # 创建主菜单实例        self.menubar = Menu(self.root)        # 显示菜单,将root根窗口的主菜单设置为menu        self.root.config(menu=self.menubar)        self.interface()    def interface(self):        """"界面编写位置"""        # 在 menubar 上设置菜单名,并关联一系列子菜单        self.menubar.add_cascade(label="文件", menu=self.papers())        self.menubar.add_cascade(label="查看", menu=self.about())    def papers(self):        """        fmenu = Menu(self.menubar): 创建子菜单实例        tearoff=1: 1的话多了一个虚线,如果点击的话就会发现,这个菜单框可以独立出来显示        fmenu.add_separator(): 添加分隔符"--------"        """        fmenu = Menu(self.menubar, tearoff=0)        # 创建单选框        for item in ['新建', '打开', '保存', '另存为']:            fmenu.add_command(label=item)        return fmenu    def about(self):        amenu = Menu(self.menubar, tearoff=0)        # 添加复选框        for item in ['项目复选框', '文件扩展名', '隐藏的项目']:            amenu.add_checkbutton(label=item)        return amenuif __name__ == '__main__':    a = GUI()    a.root.mainloop()

五、组件使用方法介绍

1、按钮(Button)绑定事件

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="运行", command=self.event)        self.Button0.grid(row=0, column=0)        self.Button1 = tk.Button(self.root, text="退出", command=self.root.destroy, bg="Gray")  # bg=颜色        self.Button1.grid(row=0, column=1, sticky="e", ipadx=10)    def event(self):        """按钮事件"""        print("运行成功")

2、输入框(Entry)内容获取

    def interface(self):        """"界面编写位置"""        self.entry00 = tk.StringVar()        self.entry00.set("默认信息")        self.entry0 = tk.Entry(self.root, textvariable=self.entry00)        self.entry0.grid(row=1, column=0)        self.Button0 = tk.Button(self.root, text="运行", command=self.event)        self.Button0.grid(row=0, column=0)    def event(self):        """按钮事件,获取文本信息"""        a = self.entry00.get()        print(a)

2、文本输入框(Text),写入文本信息和清除文本信息

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="清除", command=self.event)        self.Button0.grid(row=0, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=1, column=0)        self.w1.insert("insert", "默认信息")    def event(self):        '''清空输入框'''        self.w1.delete(1.0, "end")

3、获取复选按钮(Checkbutton)的状态

  def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.event)        self.Button0.grid(row=0, column=0)        self.v1 = tk.IntVar()        self.Checkbutton01 = tk.Checkbutton(self.root, text="复选框", command=self.Check_box, variable=self.v1)        self.Checkbutton01.grid(row=1, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=2, column=0)    def event(self):        '''按钮事件,获取复选框的状态,1表示勾选,0表示未勾选'''        a = self.v1.get()        self.w1.insert(1.0, str(a)+'\n')    def Check_box(self):        '''复选框事件'''        if self.v1.get() == 1:            self.w1.insert(1.0, "勾选"+'\n')        else:            self.w1.insert(1.0, "未勾选"+'\n')

4、清除控件

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.event)        self.Button0.grid(row=0, column=0)        self.Label0 = tk.Label(self.root, text="文本显示")        self.Label0.grid(row=1, column=0)        self.Entry0 = tk.Entry(self.root)        self.Entry0.grid(row=2, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=3, column=0)    def event(self):        '''按钮事件,清除Label、Entry、Text组件'''        a = [self.Label0, self.Entry0, self.w1]        for i in a:            i.grid_forget()

5、清除复选框勾选状态

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.event)        self.Button0.grid(row=0, column=0)        self.v1 = tk.IntVar()        self.Checkbutton01 = tk.Checkbutton(self.root, text="复选框", command=self.Check_box, variable=self.v1)        self.Checkbutton01.grid(row=1, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=2, column=0)    def event(self):        '''按钮事件,清除复选框勾选状态'''        self.Checkbutton01.deselect()    def Check_box(self):        '''复选框事件'''        if self.v1.get() == 1:            self.w1.insert(1.0, "勾选"+'\n')        else:            self.w1.insert(1.0, "未勾选"+'\n')

6、文本框(Text)内容获取

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.event)        self.Button0.grid(row=0, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=1, column=0)    def event(self):        a = self.w1.get('0.0', 'end')        print(a)

7、下拉选择框绑定事件

    def interface(self):        """"界面编写位置"""        self.value = tk.StringVar()        self.value.set('2')  # 默认值         values = ['1', '2', '3', '4']        self.combobox = ttk.Combobox(            master=self.root,  # 父容器            height=10,  # 高度,下拉显示的条目数量            width=20,  # 宽度            state='',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...            font=('', 15),  # 字体            textvariable=self.value,  # 通过StringVar设置可改变的值            values=values,  # 设置下拉框的选项            )        # 绑定事件,下拉列表框被选中时,绑定pick()函数        self.combobox.bind("<<ComboboxSelected>>", self.pick)        self.combobox.grid(padx=150)    def pick(self, *args):  # 处理事件,*args表示可变参数        print('选中的数据:{}'.format(self.combobox.get()))        print('value的值:{}'.format(self.value.get()))

六、Tkinter使用多线程

1、为什么要使用多线程

    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.event)        self.Button0.grid(row=0, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=1, column=0)    def event(self):        '''按钮事件,一直循环'''        a = 0        while True:            a += 1            self.w1.insert(1.0, str(a)+'\n')

单线程下,主线程需要运行窗口,如果这个时候点击“确定”按钮,主线程就会去执行event方法,那界面就会出现“无响应”状态,如果要界面正常显示,那我们就需要用到多线程(threading)
python中Tkinter如何使用

import tkinter as tkimport threading  # 导入多线程模块class GUI:    def __init__(self):        self.root = tk.Tk()        self.root.title('演示窗口')        self.root.geometry("500x200+1100+150")        self.interface()    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定", command=self.start)        self.Button0.grid(row=0, column=0)        self.w1 = tk.Text(self.root, width=80, height=10)        self.w1.grid(row=1, column=0)    def event(self):        '''按钮事件,一直循环'''        a = 0        while True:            a += 1            self.w1.insert(1.0, str(a)+'\n')    def start(self):        self.T = threading.Thread(target=self.event)  # 多线程        self.T.setDaemon(True)  # 线程守护,即主进程结束后,此线程也结束。否则主进程结束子进程不结束        self.T.start()  # 启动if __name__ == '__main__':    a = GUI()    a.root.mainloop()

python中Tkinter如何使用

七、Tkinter多线程暂停和继续

import tkinter as tkimport threadingfrom time import sleepevent = threading.Event()class GUI:    def __init__(self):        self.root = tk.Tk()        self.root.title('演示窗口')        self.root.geometry("500x200+1100+150")        self.interface()    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="启动", command=self.start)        self.Button0.grid(row=0, column=0)        self.Button0 = tk.Button(self.root, text="暂停", command=self.stop)        self.Button0.grid(row=0, column=1)        self.Button0 = tk.Button(self.root, text="继续", command=self.conti)        self.Button0.grid(row=0, column=2)        self.w1 = tk.Text(self.root, width=70, height=10)        self.w1.grid(row=1, column=0, columnspan=3)    def event(self):        '''按钮事件,一直循环'''        while True:            sleep(1)            event.wait()            self.w1.insert(1.0, '运行中'+'\n')    def start(self):        event.set()        self.T = threading.Thread(target=self.event)        self.T.setDaemon(True)        self.T.start()    def stop(self):        event.clear()        self.w1.insert(1.0, '暂停'+'\n')    def conti(self):        event.set()        self.w1.insert(1.0, '继续'+'\n')if __name__ == '__main__':    a = GUI()    a.root.mainloop()

八、Tkinter文件之间的调用

1、准备工作

2、方法

# a.py 文件import tkinter as tkimport threadingfrom b import logic  # 调用b文件中的logic类class GUI:    def __init__(self):        self.root = tk.Tk()        self.root.title('演示窗口')        self.root.geometry("500x260+1100+150")        self.interface()    def interface(self):        """"界面编写位置"""        self.Button0 = tk.Button(self.root, text="确定执行", command=self.start, bg="#7bbfea")        self.Button0.grid(row=0, column=1, pady=10)        self.entry00 = tk.StringVar()        self.entry00.set("")        self.entry0 = tk.Entry(self.root, textvariable=self.entry00)        self.entry0.grid(row=1, column=1, pady=15)        self.w1 = tk.Text(self.root, width=50, height=8)        self.w1.grid(row=2, column=0, columnspan=3, padx=60)    def seal(self):        '''把b文件的类单独写一个方法'''        a = self.entry00.get()        w1 = self.w1        logic().event(a, w1)    def start(self):        '''子线程无法直接执行b的类,需要把b文件单独写一个方法,然后执行'''        self.T = threading.Thread(target=self.seal)        self.T.setDaemon(True)        self.T.start()if __name__ == '__main__':    a = GUI()    a.root.mainloop()
# b.py 文件import timeclass logic():    def __init__(self):        pass    def main(self, a, x):        while True:            y = int(a)+int(x)            self.w1.insert(1.0, str(y)+'\n')            time.sleep(1)            x += 1    def event(self, a, w1):        '''调用main的方法'''        self.w1 = w1        x = 1        self.main(a, x)

“python中Tkinter如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯