한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.

WBOY
풀어 주다: 2022-07-05 20:47:06
앞으로
4125명이 탐색했습니다.

이 기사는 Tkinter와 관련된 문제를 주로 정리하는 Python에 대한 관련 지식을 제공합니다. Tkinter는 Python을 사용하여 창 디자인을 하는 모듈입니다. 모두에게 도움이 되기를 바랍니다.

한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.

[관련 권장사항: Python3 동영상 튜토리얼 ]

1. 소개

1.1. Tkinter란

  • Tkinter는 Python을 이용한 창 디자인 모듈입니다. Tkinter 모듈("Tk 인터페이스")은 Python의 표준 Tk GUI 툴킷에 대한 인터페이스입니다. Python 전용 GUI 인터페이스로서 이미지 창입니다. Tkinter는 Python과 함께 제공되며 편집이 가능한 GUI 인터페이스입니다. 시작하고 창 사용에 익숙해지는 것이 매우 필요합니다.

2. 준비

2.1. Windows 데모 환경 설정

  • python3.7 설치
  • 에디터 설치 및 사용된 Visual Studio Code 시연

3.1 창 생성.

먼저 tkinter 라이브러리를 가져옵니다

    import tkinter as tk  # 在代码里面导入库,起一个别名,以后代码里面就用这个别名root = tk.Tk()  # 这个库里面有Tk()这个方法,这个方法的作用就是创建一个窗口
    로그인 후 복사
  • 위의 두 줄의 코드만 실행하면 프로그램을 실행할 때 응답이 없습니다. 왜냐하면 주 기능이 하나뿐이고 실행 후에는 사라지기 때문입니다. 위에서 아래로 이 창도 매우 빠릅니다. 사라지므로 이제 창을 계속 표시한 다음 루프를 추가하면 됩니다.
  • 생성된 창의 이름은 루트이므로 이것을 사용할 수 있습니다. 나중에 이 창을 조작하려면 루트를 사용하세요.

      root.mainloop()  # 加上这一句,就可以看见窗口了
      로그인 후 복사
    • 위의 3줄을 실행하면 창이 보입니다
    • 3.2 창에 제목을 지정하세요

      root.title('演示窗口')
      로그인 후 복사
      한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.
      3.3 창 설정

      한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.
      다음 코드를 사용하여 길이를 설정할 수 있습니다. 그리고 창의 너비와 화면에서의 창의 위치

        root.geometry("300x100+630+80")  # 长x宽+x*y
        로그인 후 복사
      • 3.3. 버튼을 만들고 버튼에 클릭 이벤트를 추가하세요

        한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.
        이 라이브러리에는 Button() 메소드가 있습니다. 이 메서드가 호출되면 이 구성 요소를 상수에 할당하고 이 상수를 사용하여 나중에 이 메서드의 매개 변수를 사용하려면 창 이름을 작성해야 합니다.

          Button (루트) 이는 우리가 만든 버튼이 배치되었다는 의미입니다. 이 창으로 이동
        btn1 = tk.Button(root)
        로그인 후 복사
      • 버튼에 이름을 지정하세요
          btn1["text"] = "点击"
          로그인 후 복사
        • 우리가 만든 버튼 구성요소가 창에 배치되었지만 어디에 배치되었든 상관없습니다. 창, 남동쪽, 북서쪽 또는 어느 곳에서나 팩() 위치로 이동(다른 위치 지정 방법은 나중에 소개됩니다)
            btn1.pack()  # 按钮在窗口里面的定位
            로그인 후 복사
          • 클릭 버튼 이벤트를 위한 팝업 창을 만듭니다. 별도로 가져오세요
              from tkinter import messageboxdef test(e):
                  messagebox.showinfo("窗口名称","点击成功")
              로그인 후 복사
            • 이제 버튼과 메소드가 있으므로 원하는 것은 버튼을 클릭하자마자 이 메소드를 실행하는 것입니다. 그러면 버튼과 메소드를 바인딩해야 합니다
                btn1.bind("<button-1>",test) #第一个参数为:按鼠标左键的事件 第二个参数为:要执行的方法的名字</button-1>
                로그인 후 복사
              • 버튼 컴포넌트에는 바인딩() 메소드가 있습니다. 이 메소드는 바인딩
              • import tkinter as tkfrom tkinter import messagebox
                root = 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("", test)  # 将按钮和方法进行绑定,也就是创建了一个事件root.mainloop()  # 让窗口一直显示,循环
                로그인 후 복사

                  3.4 창 내 컴포넌트 레이아웃
                3 레이아웃 관리자: 팩 - 그리드 - 배치

                한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.

                pack 
                这个布局管理器,要么将组件垂直的排列,要么水平的排列
                로그인 후 복사
                grid 
                Grid(网格)布局管理器会将控件放置到一个二维的表格里。
                主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。
                로그인 후 복사

                • Options
                Description셀 일련 번호, 0
                column
                columnspan 에 걸쳐 있는 열 수, 양의 정수
                row 셀의 행 번호, 0부터 시작하는 양의 정수
                rowspan 행 전체에 걸친 행 수, 양의 정수
                ipadx, ipady 하위 간격 설정 -구성 요소, x 방향 또는 y 방향에서 기본 단위는 픽셀, 비 부동 소수점 수, 기본값은 0.0
                padx, pady 병치된 구성 요소 사이의 x 방향 또는 간격 y 방향, 기본 단위는 픽셀, 비 부동 소수점 수, 기본값은 0.0
                sticky 구성 요소는 남동쪽 북서쪽 중심과 4에 해당하는 셀의 특정 피트에 가깝습니다. 모서리. east = "e", south = "s", west = "w", north = "n", "ne", "se", "sw", "nw"
                • grid_info() 查看组件默认的参数
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • column 指定控件所在的列
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • columnspan 指定每个控件横跨的列数
                • 什么是columnspan?

                类似excel的合并单元格
                한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.
                a占了两个格子的宽度,colunmspan就是2

                "python
                import tkinter as tk
                root = tk.Tk()
                
                # 按钮1
                btn1 = tk.Button(root)
                btn1["text"] = "按钮1"
                btn1.grid(column=0, columnspan=2)
                
                # 按钮2
                btn2 = tk.Button(root)
                btn2["text"] = "按钮2"
                btn2.grid(column=1, columnspan=1)
                
                
                root.title('演示窗口')
                root.geometry("300x100+1000+300")
                root.mainloop()
                로그인 후 복사

                한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.

                • row 指定控件所在的行
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • rowspan 指定每个控件横跨的行数

                • 什么是rowspan ?

                类似excel的合并单元格
                한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.
                a占了两个格子的高度,rowspan就是2

                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • ipadx 水平方向内边距
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • ipady 垂直方向内边距
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • padx 水平方向外边距
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • pady 垂直方向外边距
                import tkinter as tk
                root = 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의 사용법을 이해하십시오.

                • sticky 组件东南西北的方向
                import tkinter as tk
                root = 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 tk
                root = 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基本控件介绍

                4.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()
                로그인 후 복사

                4.2、文本显示_Label

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

                4.3、按钮显示_Button

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

                4.4、输入框显示_Entry

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

                4.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)
                로그인 후 복사

                4.6、复选按钮_Checkbutton

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

                4.7、单选按钮_Radiobutton

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

                4.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)
                로그인 후 복사

                4.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()
                로그인 후 복사

                五、组件使用方法介绍

                5.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("运行成功")
                로그인 후 복사

                5.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)
                로그인 후 복사

                5.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")
                로그인 후 복사

                5.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')
                로그인 후 복사

                5.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.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')
                로그인 후 복사

                5.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)
                로그인 후 복사

                5.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(">", self.pick)
                        self.combobox.grid(padx=150)
                
                    def pick(self, *args):  # 处理事件,*args表示可变参数
                        print('选中的数据:{}'.format(self.combobox.get()))
                        print('value的值:{}'.format(self.value.get()))
                로그인 후 복사

                六、Tkinter使用多线程

                6.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 sleep
                
                event = 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文件之间的调用

                8.1、准备工作

                • a.py文件 - -界面逻辑+线程
                • b.py 文件 - -业务逻辑
                • 以上文件在同一个目录下

                8.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)
                로그인 후 복사

                【相关推荐:Python3视频教程

                위 내용은 한 기사로 Python에서 Tkinter의 사용법을 이해하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

                관련 라벨:
                원천:csdn.net
                본 웹사이트의 성명
                본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
                인기 튜토리얼
                더>
                최신 다운로드
                더>
                웹 효과
                웹사이트 소스 코드
                웹사이트 자료
                프론트엔드 템플릿