目錄
圖形使用者介面(GUI)
用於創建GUI的Python 庫
Tkinter 基礎
Tkinter Widgets
Entry
Combobox
Checkbutton
Radio Button
Scrolled Text
Message Box
SpinBox
Geometry
组织布局
binding 函数
Images 和 Icons
计算器 APP
首頁 後端開發 Python教學 Python GUI佈局工具Tkinter使用方法是什麼

Python GUI佈局工具Tkinter使用方法是什麼

May 09, 2023 pm 02:16 PM
python gui tkinter

    圖形使用者介面(GUI)

    圖形使用者介面(GUI) 只不過是一個桌面應用程序,可幫助我們與電腦進行互動

    • 像文字編輯器這樣的GUI 應用程式可以建立、讀取、更新和刪除不同類型的檔案

    • 數獨、國際象棋和紙牌等應用程式則是遊戲版的GUI程式

    • 還有Google Chrome、Firefox 和Microsoft Edge 之類的GUI 應用程式是用來瀏覽Internet 的

    #這些都是我們日常在電腦上使用的一些不同類型的GUI 應用程序,其實我們透過Tkinter 也是可以建立簡單的類似應用程式的

    今天我們作為GUI 的入門,將創建一個非常簡單且漂亮的GUI 應用程式

    用於創建GUI的Python 庫

    Python 有大量的第三方類別庫,對於GUI 庫,主要有以下幾種:

    • Kivy

    • Python QT

    • wxPython

    • Tkinter

    其中,Tkinter 是許多學習者和開發者的首選,因為它簡單易用而且隨Python 安裝自帶

    Tkinter 基礎

    下面的圖片顯示了應用程式是如何在Tkinter 中實際執行

    Python GUI佈局工具Tkinter使用方法是什麼

    #我們首先導入Tkinter 模型,接著,我們創建主窗口,在這個窗口中,我們將要執行操作並顯示一切視覺效果,接下來我們加入Widgets,最後我們進入Main Event Loop

    這裡有2 個重要的關鍵字

    • Widgets

    • Main Event Loop

    事件循環基本上是告訴程式碼繼續顯示窗口,直到我們手動關閉它,是在後台無限循環運行的

    對於Widgets 我們後面單獨學習

    下面一個程式碼例子,來深入理解下

    import tkinter
    window = tkinter.Tk()
    # to rename the title of the window window.title("GUI")
    # pack is used to show the object in the window
    label = tkinter.Label(window, text = "Hello World!").pack()
    window.mainloop()

    我們匯入Tkinter 套件並定義一個窗口,接著我們可以修改一個視窗標題,每當打開應用程式時,該標題都會顯示在標題選項卡上

    最後,我們還定義了一個標籤,標籤只不過是需要在視窗上顯示的輸出,在例子中是hello world

    Python GUI佈局工具Tkinter使用方法是什麼

    Tkinter Widgets

    那麼到底什麼是Widgets 呢

    Widgets 類似HTML 中的元素,我們可以在Tkinter 中找到針對不同類型元素的不同類型的Widgets

    讓我們看看Tkinter 中所有這些Widgets 的簡要介紹

    Python GUI佈局工具Tkinter使用方法是什麼

    • Canvas - Canvas 使用於在GUI 中繪製形狀

    • Button – Button 用於在Tkinter 中放置按鈕

    • ##Checkbutton – Checkbutton 用於在應用程式中建立複選按鈕

    • Entry - Entry 用於在GUI 中建立輸入欄位

    • Frame – Frame 在Tkinter 中用作容器

    • Label - Label 用於建立單行Widgets,如文字、圖片等

    • Menu - Menu 用於在GUI 中建立選單

    下面讓我們逐一看一下每個Widgets 的用法

    Label

    標籤用於創建文字和圖像以及所有相關的,而且要注意的是,它只能是單行定義

    l1 = Label(window, text="萝卜大杂烩!", font=("ArialBold", 50))
    l1.grid(column=0, row=0)

    Python GUI佈局工具Tkinter使用方法是什麼

    還有一個函數geometry,它基本上用於更改視窗大小並根據我們的要求進行設定

    l1 = Label(window, text="萝卜大杂烩!", font=("ArialBold", 50))
    window.geometry('350x200')

    在這種情況下,我們將其設置為寬350 像素和高200 像素

    接下來是button

    #Button

    按鈕與標籤非常相似,我們建立一個變數並使用Widgets 語法來定義按鈕要表達的內容

    window.geometry('350x200')
    bt = Button(window, text="Enter")

    Python GUI佈局工具Tkinter使用方法是什麼

    #我們也可以更改按鈕或任何其他Widgets 的前景顏色,使用程式碼中所示的參數FG。同樣,也可以使用BG 屬性更改背景顏色

    bt = Button(window, text="Enter", bg="orange", fg="red")
    bt.grid(column=1, row=0)

    Python GUI佈局工具Tkinter使用方法是什麼

    我們的前景是定義為紅色的文本,背景為橙色

    #下面來看一下點擊按鈕的操作

    def clicked():
        l1.configure(text="按钮被点击了!!")
    bt = Button(window, text="Enter", bg="orange", fg="red", command=clicked)

    這個我們稱之為點擊事件,我們需要編寫有關單擊按鈕或觸發單擊事件時應該發生什麼的功能

    #我們定義了一個名為clicked 的函數,可以顯示一則文字訊息,我們在按鈕定義中新增一個名為command 的參數,來呼叫點擊事件

    Python GUI佈局工具Tkinter使用方法是什麼

    Entry

    它用于在 GUI 中创建输入字段以接收文本输入

    txt = Entry(window, width=10)
    txt.grid(column=1, row=0)
    def clicked():
        res = "Welcome to " + txt.get()
        l1.configure(text=res)
    bt = Button(window, text="Enter", bg="orange", fg="red", command=clicked)

    在这里,我们使用 Tkinter Entry 类创建一个文本框,grid 定义我们希望窗口小部件位于何处

    同时 clicked 函数接收 Entry 的文本信息

    Python GUI佈局工具Tkinter使用方法是什麼

    Combobox

    这是一个带有某些选项的下拉菜单

    from tkinter.ttk import *
    combo = Combobox(window)
    combo['values']= (1, 2, 3, 4, 5, "Text")
    combo.current(3)
    combo.grid(column=0, row=0)

    Python GUI佈局工具Tkinter使用方法是什麼

    这样一个下拉菜单就完成了

    Checkbutton

    复选按钮是非常常用的组件

    chk_state = BooleanVar()
    chk_state.set (True)
    chk = Checkbutton(window, text="Select", var=chk_state)
    chk.grid(column=4, row=0)

    我们首先创建一个 booleanvar 类型的变量,这是一个 Tkinter 变量

    默认情况下,我们将设置状态保持为 true,这代表按钮已经被选中 接下来,我们将 chk_state 传递给 checkbutton 类来为我们设置检查状态

    Python GUI佈局工具Tkinter使用方法是什麼

    Radio Button

    单选按钮也是非常常用的

    rad1 = Radiobutton(window, text=Python', value=1)
    rad2 = Radiobutton(window, text=Java', value=2)
    rad3 = Radiobutton(window, text=Scala', value=3)
    rad1.grid(column=0, row=0)
    rad2.grid(column=1, row=0)
    rad3.grid(column=2, row=0)

    在这里,我们使用了不同的参数值,1,2和3,如果它们相同,则会导致冲突并出现错误

    它们的文本数据是可以相同,在这里,我们使用了 Python、Java 和 Scala

    Python GUI佈局工具Tkinter使用方法是什麼

    Scrolled Text

    滚动文本组件

    scro_txt = scrolledtext.ScrolledText(window, width=40,height=10)
    scro_txt.grid(column=0, row=4)

    我们指定了窗口的高和宽,否则默认会填充整个 Windiws 窗口

    Python GUI佈局工具Tkinter使用方法是什麼

    Message Box

    消息组件可以方便的弹出提醒消息

    def clicked():
        messagebox.showinfo('Message title', 'Message content')
    btn = Button(window,text=‘ENTER', command=clicked)

    Python GUI佈局工具Tkinter使用方法是什麼

    SpinBox

    Spinbox 也是一个常见的组件,有两个选项卡,存在向上和向下滚动选项卡

    pin = Spinbox(window, from_=0, to=100, width=5)

    有 3 个参数——from、to 和 width

    • From – 告诉我们范围的开始和默认值

    • to – 给我们范围的上限阈值

    • width 基本上是将 widget 的大小设置为5个字符的空格

    Python GUI佈局工具Tkinter使用方法是什麼

    Geometry

    Tkinter 中的所有 Widgets 都会有一些位置信息,这些度量使得我们可以组织 Widgets 及其父框架、窗口等

    Tkinter 具有以下三个布局方式

    • pack():- 它在块中组织 Widgets,这意味着它占据了整个可用宽度,这是在窗口中显示 Widgets 的标准方法

    • grid():- 它以类似表格的结构组织 Widgets

    • place():- 它将 Widgets 放置在我们想要的特定位置

    组织布局

    为了在窗口中安排布局,我们将使用 Frame 类

    • Frame -- 在窗口中创建分区,我们可以根据需要使用 pack() 方法的侧面参数对齐框架

    • Button -- 在窗口中创建一个按钮,需要传递几个参数,如文本(按钮的值)、fg(文本的颜色)、bg(背景颜色)

    在下面的代码中,我们使用 window、top_frame、bottom_frame 来布局

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    # creating 2 frames TOP and BOTTOM
    top_frame = tkinter.Frame(window).pack()
    bottom_frame = tkinter.Frame(window).pack(side = "bottom")
    # now, create some widgets in the top_frame and bottom_frame
    btn1 = tkinter.Button(top_frame, text = "Button1", fg = "red").pack()# 'fg - foreground' is used to color the contents
    btn2 = tkinter.Button(top_frame, text = "Button2", fg = "green").pack()# 'text' is used to write the text on the Button
    btn3 = tkinter.Button(bottom_frame, text = "Button2", fg = "purple").pack(side = "left")# 'side' is used to align the widgets
    btn4 = tkinter.Button(bottom_frame, text = "Button2", fg = "orange").pack(side = "left")
    window.mainloop()

    Python GUI佈局工具Tkinter使用方法是什麼

    再来看一个登录的小栗子

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    # creating 2 text labels and input labels
    tkinter.Label(window, text = "Username").grid(row = 0) # this is placed in 0 0
    # 'Entry' is used to display the input-field
    tkinter.Entry(window).grid(row = 0, column = 1) # this is placed in 0 1
    tkinter.Label(window, text = "Password").grid(row = 1) # this is placed in 1 0
    tkinter.Entry(window).grid(row = 1, column = 1) # this is placed in 1 1
    # 'Checkbutton' is used to create the check buttons
    tkinter.Checkbutton(window, text = "Keep Me Logged In").grid(columnspan = 2) # 'columnspan' tells to take the width of 2 columns
    # you can also use 'rowspan' in the similar manner
    window.mainloop()

    Python GUI佈局工具Tkinter使用方法是什麼

    下面我们来了解 binding 函数

    binding 函数

    每当事件发生时调用函数就是绑定函数

    在下面的示例中,当单击按钮时,它会调用一个名为 say_hi 的函数。 函数 say_hi 会创建一个带有文本 Hi 的新标签

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    # creating a function called say_hi()
    def say_hi():
        tkinter.Label(window, text = "Hi").pack()
    tkinter.Button(window, text = "Click Me!", command = say_hi).pack() # 'command' is executed when you click the button
    # in this above case we're calling the function 'say_hi'.
    window.mainloop()

    Python GUI佈局工具Tkinter使用方法是什麼

    另一种绑定函数的方法是使用事件,事件类似于鼠标移动、鼠标悬停、单击和滚动等等

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    # creating a function with an arguments 'event'
    def say_hi(event): # you can rename 'event' to anything you want
        tkinter.Label(window, text = "Hi").pack()
    btn = tkinter.Button(window, text = "Click Me!")
    btn.bind("Button-1", say_hi) # 'bind' takes 2 parameters 1st is 'event' 2nd is 'function'
    btn.pack()
    window.mainloop()

    单击事件有 3 种不同的类型,分别是 leftClick、middleClick 和 rightClick

    下面的代码将使用对于的文本创建一个新标签

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    #creating 3 different functions for 3 events
    def left_click(event):
        tkinter.Label(window, text = "Left Click!").pack()
    def middle_click(event):
        tkinter.Label(window, text = "Middle Click!").pack()
    def right_click(event):
        tkinter.Label(window, text = "Right Click!").pack()
    window.bind("Button-1", left_click)
    window.bind("Button-2", middle_click)
    window.bind("Button-3", right_click)
    window.mainloop()

    Python GUI佈局工具Tkinter使用方法是什麼

    Images 和 Icons

    我们可以使用 PhotoImage 方法添加图像和图标

    import tkinter
    window = tkinter.Tk()
    window.title("GUI")
    # taking image from the directory and storing the source in a variable
    icon = tkinter.PhotoImage(file = "4.PNG")
    # displaying the picture using a 'Label' by passing the 'picture' variriable to 'image' parameter
    label = tkinter.Label(window, image = icon)
    label.pack()
    window.mainloop()

    Python GUI佈局工具Tkinter使用方法是什麼

    好了,进步的 Tkinter 知识我们都梳理完毕了,下面就完成一个简单的实战项目吧

    计算器 APP

    首先初始化页面

    window = Tk()
    window.geometry("350x380")
    window.resizable(0, 0)  # this prevents from resizing the window
    window.title("小小计算器")

    接下来定义输入数字框

    input_text = StringVar()
    input_frame = Frame(window, width=312, height=50, bd=0, highlightbackground="black", highlightcolor="black",
                        highlightthickness=1)
    input_frame.pack(side=TOP)
    input_field = Entry(input_frame, font=('arial', 18, 'bold'), textvariable=input_text, width=50, bg="#eee", bd=0,
                        justify=RIGHT)
    input_field.grid(row=0, column=0)
    input_field.pack(ipady=10)

    然后定义按钮方法,我们以清除按钮和除法按钮为例

    clear = Button(btns_frame, text="C", fg="black", width=32, height=3, bd=0, bg="#eee", cursor="hand2",
                   command=lambda: btn_clear()).grid(row=0, column=0, columnspan=3, padx=1, pady=1)
    divide = Button(btns_frame, text="/", fg="black", width=10, height=3, bd=0, bg="#eee", cursor="hand2",
                    command=lambda: btn_click("/")).grid(row=0, column=3, padx=1, pady=1)

    最后就是计算equal逻辑

    equals = Button(btns_frame, text="=", fg="black", width=10, height=3, bd=0, bg="#eee", cursor="hand2",
                   command=lambda: btn_equal()).grid(row=4, column=3, padx=1, pady=1)
    def btn_equal():
       global expression
       result = str(eval(expression)) 
       input_text.set(result)
       expression = ""

    以上是Python GUI佈局工具Tkinter使用方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Laravel 教程
    1604
    29
    PHP教程
    1510
    276
    如何在Python中創建虛擬環境 如何在Python中創建虛擬環境 Aug 05, 2025 pm 01:05 PM

    創建Python虛擬環境可使用venv模塊,步驟為:1.進入項目目錄執行python-mvenvenv創建環境;2.Mac/Linux用sourceenv/bin/activate、Windows用env\Scripts\activate激活;3.使用pipinstall安裝包、pipfreeze>requirements.txt導出依賴;4.注意避免將虛擬環境提交到Git,並確認安裝時處於正確環境。虛擬環境能隔離項目依賴防止衝突,尤其適合多項目開發,編輯器如PyCharm或VSCode也

    在Python中調試內存洩漏的常見策略是什麼? 在Python中調試內存洩漏的常見策略是什麼? Aug 06, 2025 pm 01:43 PM

    Usetracemalloctotrackmemoryallocationsandidentifyhigh-memorylines;2.Monitorobjectcountswithgcandobjgraphtodetectgrowingobjecttypes;3.Inspectreferencecyclesandlong-livedreferencesusingobjgraph.show_backrefsandcheckforuncollectedcycles;4.Usememory_prof

    如何與Python的時區合作? 如何與Python的時區合作? Aug 05, 2025 pm 04:53 PM

    use usezoneInInfoforpython3.9 toCreateTimeZone-wardEteTimesandConvertBetBetWeenTimeZonesWithAstimeZone(); 2.Forpython3.6–3.6-3.6-3.6,useppypytzwithlocalize()

    如何使用Python自動化從Excel到Web表單的數據輸入? 如何使用Python自動化從Excel到Web表單的數據輸入? Aug 12, 2025 am 02:39 AM

    使用Python自動化將Excel數據填入網頁表單的方法是:先用pandas讀取Excel數據,再用Selenium控制瀏覽器自動填寫並提交表單;具體步驟包括安裝pandas、openpyxl和Selenium庫,下載對應瀏覽器驅動,用pandas讀取data.xlsx文件中的Name、Email、Phone等字段,通過Selenium啟動瀏覽器打開目標網頁,定位表單元素並逐行填入數據,使用WebDriverWait處理動態加載內容,添加異常處理和延遲確保穩定性,最後提交表單並循環處理所有數據行

    如何根據其值對Python字典進行分類? 如何根據其值對Python字典進行分類? Aug 05, 2025 am 03:32 AM

    要排序字典的值,使用sorted()函數配合dict.items()和key參數;1.使用lambdaitem:item[1]按值升序排序;2.添加reverse=True實現降序排序;3.可用operator.itemgetter(1)替代lambda以提升可讀性和性能;字典在Python3.7 中保持插入順序,原字典不變,返回新字典,若值類型混雜需額外處理,最終模式為dict(sorted(d.items(),key=lambdax:x[1]))。

    如何在Python類中實現自定義迭代器? 如何在Python類中實現自定義迭代器? Aug 06, 2025 pm 01:17 PM

    Define__iter__()toreturntheiteratorobject,typicallyselforaseparateiteratorinstance.2.Define__next__()toreturnthenextvalueandraiseStopIterationwhenexhausted.Tocreateareusablecustomiterator,managestatewithin__iter__()oruseaseparateiteratorclass,ensurin

    如何在Python中打印出JSON文件? 如何在Python中打印出JSON文件? Aug 07, 2025 pm 12:10 PM

    要美化打印JSON文件,需使用json模塊的indent參數,具體步驟為:1.使用json.load()讀取JSON文件數據;2.使用json.dump()並將indent設為4或2寫入新文件,即可生成格式化後的JSON文件,完成美化打印。

    如何在VSCODE中設置Python虛擬環境 如何在VSCODE中設置Python虛擬環境 Aug 06, 2025 am 02:30 AM

    創建虛擬環境:在項目文件夾中運行python-mvenvvenv。 2.激活虛擬環境:Windows使用venv\Scripts\activate,macOS/Linux使用sourcevenv/bin/activate。 3.在VSCode中打開項目並按Ctrl Shift P選擇Python解釋器,指定虛擬環境中的解釋器。 4.驗證是否生效:運行importsys;print(sys.executable),輸出路徑應指向venv文件夾。 5.可選配置:在設置中啟用python.terminal.a

    See all articles