最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+tkinter可視化GUI方式

 更新時間:2026年04月13日 10:13:55   作者:吾名招財  
文章介紹了使用Python的tkinter庫創(chuàng)建GUI窗口的過程,包括窗口和標簽的定義、Entry和Text控件的基本屬性和使用方法、網(wǎng)格布局的應(yīng)用、按鈕綁定事件和彈窗的使用、Combox下拉框的添加、控件屬性值的獲取和更改,以及tkinter自帶的剪切板操作

1.創(chuàng)建窗口

import tkinter as tk    #導(dǎo)入tk
if __name__ == '__main__':
    root = tk.Tk()                   #root代表一個窗口,每調(diào)用一次函數(shù)就會新生成一個窗口
    root.mainloop()                  #無限循環(huán),不斷更新頁面

2.窗口的定義和label的使用

一般的編寫方式如何

一般會聲明一個類

3.Label、Entry、Text的基本屬性和使用

標簽、編輯框、文本框

(1)標簽

標簽的基本參數(shù)如下

(2)編輯框

(3)文本框

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招財進寶
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #導(dǎo)入tk
from tkinter import *     #在下方進行使用tk.Label()等方法時,可直接Label()

class Application(tk.Frame):
    #類的初始化函數(shù)
    def __init__(self,root):        #傳入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必須調(diào)用,用于將控件添加到窗口中,否則控件不顯示
        self.envar = tk.StringVar(None, '123')

        self.intwind()              #調(diào)用窗口函數(shù)

    #創(chuàng)建窗口控件
    def intwind(self):
        #以下的每個控件都要pack
        Label(self,text='123',fg='red',bg='green',width=50).pack()       #傳入文本123,文字顏色紅色,背景綠色,所占50個字的寬度
        Entry(self,textvariable=self.envar,fg='#888',bg='#ff0',width=10).pack()     #編輯框

        text = Text(self,fg='#ff0',bg='#000',width=20)                       #初始化一個文本控件對象
        text.pack()                             #在此處pack,pack后返回的值是none
        text.insert('end','111')                #在末尾插入文字123
        text.insert('end', '222')
        text.insert('1.4', '555')               #在第1行第4列插入數(shù)字
        text.insert('1.8', '333')               #此處指定位置插入成功
        text.insert('2.1', '444')              #當輸入2.X或者0.X時,都是插入最后面,原因可能是只有一行,無換行
        text.insert('1.13', '666')


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一個窗口,每調(diào)用一次函數(shù)就會新生成一個窗口
    application = Application(root)         #初始化一個對象,傳入窗口root
    root.mainloop()                  #無限循環(huán),不斷更新頁面

4.網(wǎng)格布局講解

前面的排版都是以數(shù)列進行排版的,即一行一行的排版

這里使用grid函數(shù),而不是使用pack函數(shù)了。

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招財進寶
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #導(dǎo)入tk
from tkinter import *     #在下方進行使用tk.Label()等方法時,可直接Label()

class Application(tk.Frame):
    #類的初始化函數(shù)
    def __init__(self,root):        #傳入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必須調(diào)用,用于將控件添加到窗口中,否則控件不顯示
        self.envar = tk.StringVar(None, '123')

        self.intwind()              #調(diào)用窗口函數(shù)

    #創(chuàng)建窗口控件
    def intwind(self):
        #以下的每個控件都要pack
        Label(self,text='123',fg='red',bg='green',width=2).grid(row=0,column=0)       #傳入文本123,文字顏色紅色,背景綠色,所占50個字的寬度
        Entry(self,textvariable=self.envar,fg='#888',bg='#ff0',width=10).grid(row=0,column=1)     #編輯框

        text = Text(self,fg='#ff0',bg='#000',width=20)                       #初始化一個文本控件對象
        #text.grid(columnspan=2,rowspan=2,pady=20,padx=50)               #合并兩列,可達到居中的效果
        text.grid(columnspan=2, rowspan=2, ipadx=50)                        #ipadx會向外擴展,而padx會向里縮
        text.insert('end','111')                #在末尾插入文字123
        text.insert('end', '222')
        text.insert('1.4', '555')               #在第1行第4列插入數(shù)字
        text.insert('1.8', '333')               #此處指定位置插入成功
        text.insert('2.1', '444')              #當輸入2.X或者0.X時,都是插入最后面,原因可能是只有一行,無換行
        text.insert('1.13', '666')


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一個窗口,每調(diào)用一次函數(shù)就會新生成一個窗口
    application = Application(root)         #初始化一個對象,傳入窗口root
    root.mainloop()                  #無限循環(huán),不斷更新頁面

5.豐富窗口編寫一個簡單的窗口

編寫一個類似下方框架的窗口

發(fā)現(xiàn)有兩個橫向組成,此時使用frame進行框架的布局,若直接單個控件的添加,不太好管理

6.創(chuàng)建按鈕綁定事件和彈窗的使用

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招財進寶
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #導(dǎo)入tk
from tkinter import *     #在下方進行使用tk.Label()等方法時,可直接Label()
from tkinter import messagebox      #此處引入messagebox,盡管之前引入*全部了但找不到

class Application(tk.Frame):
    #類的初始化函數(shù)
    def __init__(self,root):        #傳入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必須調(diào)用,用于將控件添加到窗口中,否則控件不顯示
        self.envar = tk.StringVar(None, '123')          #用于編輯框的文本信息輸入
        #root.geometry('250x145')                        #設(shè)置窗口的大小
        root.minsize(250,145)                           #設(shè)置窗口的最小值
        root.maxsize(250, 145)                          #設(shè)置窗口的最大值
        root.title('登錄')                            #設(shè)置窗口的名稱
        #root.iconbitmap()                             #設(shè)置圖標,必須是ico格式的
        self.username = tk.StringVar()  # 用于編輯框的文本信息輸入,此處注意在前方要引入from tkinter import messagebox
        self.password = tk.StringVar()  # 用于編輯框的文本信息輸入

        self.intwind()              #調(diào)用窗口函數(shù)

    def buttonActive(self):
        u = self.username.get()             #得到編輯框中的內(nèi)容
        p = self.password.get()
        if len(u)==0 or len(p)==0:
            messagebox.showinfo('提示:','請完整信息')
            return
        messagebox.showinfo('提示:', '你輸入的賬號:%s\n密碼:%s'%(u,p))

    #創(chuàng)建窗口控件
    def intwind(self):
        frame1 = Frame(self)
        Label(frame1,text='賬號:').grid(row=0,column=0)
        Entry(frame1,textvariable=self.username).grid(row=0,column=1)

        frame2 = Frame(self)
        Label(frame2, text='密碼:').grid(row=0, column=0)
        Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示編輯框輸入的東西都會顯示*

        frame1.grid(pady=15)
        frame2.grid()

        Button(self,text='登錄',width=12,command=self.buttonActive).grid(pady=10)
        
if __name__ == '__main__':
    root = tk.Tk()                   #root代表一個窗口,每調(diào)用一次函數(shù)就會新生成一個窗口
    application = Application(root)         #初始化一個對象,傳入窗口root
    root.mainloop()                  #無限循環(huán),不斷更新頁面

7.下拉框Combox的使用

添加下拉框可以選擇是管理員還是普通成員的登錄方式

但是上方并沒有進行默認選擇

8.獲取或更改控件的屬性值

#創(chuàng)建窗口控件
def intwind(self):
    frame1 = Frame(self)
    Label(frame1,text='賬號:').grid(row=0,column=0)
    Entry(frame1,textvariable=self.username).grid(row=0,column=1)

    frame2 = Frame(self)
    Label(frame2, text='密碼:').grid(row=0, column=0)
    Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示編輯框輸入的東西都會顯示*

    frame3 = Frame(self)
    Label(frame3, text='身份:').grid(row=0, column=0)
    self.selector = ttk.Combobox(frame3,values=('普通成員','管理員'),width=18) #引入from tkinter import ttk
    self.selector.grid(row=0, column=1)
    self.selector.current(0)
    self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #綁定一個監(jiān)聽事件/函數(shù),用來監(jiān)聽選擇的

    frame3.grid(pady=6)                 #將身份的模塊放到最開始顯示
    frame1.grid(pady=10)
    frame2.grid()

    btn = Button(self,text='登錄',width=12,command=self.buttonActive)
    btn.grid(pady=10)

    # 此處獲取控件的屬性的方法(cget()),所有控件都支持
    print(self.selector.cget('values'))             #獲取下拉框的屬性values
    print(self.selector.cget('width'))              #獲取下拉框的屬性width

    #使用config獲取屬性或者更改屬性
    # self.selector.config(values=[1,2])      #重新配置屬性values的值
    # self.selector.current(0)                #設(shè)置選擇的當前值
    
    #使用字典鍵值對的方式獲取屬性值,或者更改屬性值
    self.selector['values']=[1,2]             #此處的屬性的設(shè)置相當于上面的

    print(btn['text'])                  #獲取上一個按鈕控件的屬性值,打印
    btn['text']='123'                   #對按鈕控件的屬性值更改

返回的是字典,可以以字典的方式將值打印。

#創(chuàng)建窗口控件
def intwind(self):
    frame1 = Frame(self)
    Label(frame1,text='賬號:').grid(row=0,column=0)
    Entry(frame1,textvariable=self.username).grid(row=0,column=1)

    frame2 = Frame(self)
    Label(frame2, text='密碼:').grid(row=0, column=0)
    Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示編輯框輸入的東西都會顯示*

    frame3 = Frame(self)
    Label(frame3, text='身份:').grid(row=0, column=0)
    self.selector = ttk.Combobox(frame3,values=('普通成員','管理員'),width=18) #引入from tkinter import ttk
    self.selector.grid(row=0, column=1)
    self.selector.current(0)
    self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #綁定一個監(jiān)聽事件/函數(shù),用來監(jiān)聽選擇的

    frame3.grid(pady=6)                 #將身份的模塊放到最開始顯示
    frame1.grid(pady=10)
    frame2.grid()

    btn = Button(self,text='登錄',width=12,command=self.buttonActive)
    btn.grid(pady=10)

    # btn.grid_forget()                   #是控件不顯示
    # btn.grid()                          #重新顯示,需設(shè)置pady等

    btn.grid_remove()                   #同樣隱藏控件
    btn.grid()                          #重新顯示,設(shè)置的pady等參數(shù)已經(jīng)保留

    btn.grid_propagate(0)               #0強制控件不變形(當放大縮小時)

    #self.grid_slaves(0,0)獲取當前元素的子控件的第幾行第幾列的控件
    print(self.grid_slaves(0,0))        #獲取第0行0列的frame3的控件
    print(self.grid_slaves(0, 1))        #沒有第1列的frame,只有第0列的frame,故為空
    print(self.grid_slaves(1, 0))        #獲取第1行0列的frame的控件

    # print(self.selector.grid_info())  # 獲取selector控件的grid的屬性
    # print(btn.grid_info())  # 獲取btn控件的grid的屬性

    # 此處獲取控件的屬性的方法(cget()),所有控件都支持
    print(self.selector.cget('values'))             #獲取下拉框的屬性values
    print(self.selector.cget('width'))              #獲取下拉框的屬性width

    #使用config獲取屬性或者更改屬性
    # self.selector.config(values=[1,2])      #重新配置屬性values的值
    # self.selector.current(0)                #設(shè)置選擇的當前值

    #使用字典鍵值對的方式獲取屬性值,或者更改屬性值
    self.selector['values']=[1,2]             #此處的屬性的設(shè)置相當于上面的
    print(btn['text'])                  #獲取上一個按鈕控件的屬性值,打印
   # btn['text']='123'                   #對按鈕控件的屬性值更改

9.tkinter自帶剪切板操作

一個是添加剪切板,一個是清空剪切板,調(diào)用兩個函數(shù)即可

雖然Python中有個庫也可以實現(xiàn)此操作,但使用tkinter的自帶函數(shù)即可

self.clipboard_append('123')        #在剪切板放入數(shù)字123,可以CTR+V
print(self.clipboard_get())         #獲取剪切板的內(nèi)容并打印
self.clipboard_clear()              #清空剪切板內(nèi)容,再CTR+V就顯示不出了

10.所有的代碼

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招財進寶
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #導(dǎo)入tk
from tkinter import *     #在下方進行使用tk.Label()等方法時,可直接Label()
from tkinter import messagebox      #此處引入messagebox,盡管之前引入*全部了但找不到
from tkinter import ttk

class Application(tk.Frame):
    #類的初始化函數(shù)
    def __init__(self,root):        #傳入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必須調(diào)用,用于將控件添加到窗口中,否則控件不顯示
        self.envar = tk.StringVar(None, '123')          #用于編輯框的文本信息輸入
        #root.geometry('250x145')                        #設(shè)置窗口的大小
        root.minsize(250,145)                           #設(shè)置窗口的最小值
        root.maxsize(250, 145)                          #設(shè)置窗口的最大值
        root.title('登錄')                            #設(shè)置窗口的名稱
        #root.iconbitmap()                             #設(shè)置圖標,必須是ico格式的
        self.username = tk.StringVar()  # 用于編輯框的文本信息輸入,此處注意在前方要引入from tkinter import messagebox
        self.password = tk.StringVar()  # 用于編輯框的文本信息輸入
        self.select = tk.StringVar(None,'普通成員')     #設(shè)置默認數(shù)據(jù)為普通成員

        self.intwind()              #調(diào)用窗口函數(shù)

    def buttonActive(self):
        u = self.username.get()             #得到編輯框中的內(nèi)容
        p = self.password.get()
        if len(u)==0 or len(p)==0:
            messagebox.showinfo('提示:','請完整信息')
            return
        messagebox.showinfo('提示:', '你輸入的賬號:%s\n密碼:%s\n你的登錄身份是:%s'%(u,p,self.select.get()))

    def selectorLinstener(self,*args):
        print(self.selector.get())
        self.select.set(self.selector.get())

    #創(chuàng)建窗口控件
    def intwind(self):
        frame1 = Frame(self)
        Label(frame1,text='賬號:').grid(row=0,column=0)
        Entry(frame1,textvariable=self.username).grid(row=0,column=1)

        frame2 = Frame(self)
        Label(frame2, text='密碼:').grid(row=0, column=0)
        Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示編輯框輸入的東西都會顯示*

        frame3 = Frame(self)
        Label(frame3, text='身份:').grid(row=0, column=0)
        self.selector = ttk.Combobox(frame3,values=('普通成員','管理員'),width=18) #引入from tkinter import ttk
        self.selector.grid(row=0, column=1)
        self.selector.current(0)
        self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #綁定一個監(jiān)聽事件/函數(shù),用來監(jiān)聽選擇的

        frame3.grid(pady=6)                 #將身份的模塊放到最開始顯示
        frame1.grid(pady=10)
        frame2.grid()

        btn = Button(self,text='登錄',width=12,command=self.buttonActive)
        btn.grid(pady=10)

        # btn.grid_forget()                   #是控件不顯示
        # btn.grid()                          #重新顯示,需設(shè)置pady等

        btn.grid_remove()                   #同樣隱藏控件
        btn.grid()                          #重新顯示,設(shè)置的pady等參數(shù)已經(jīng)保留

        btn.grid_propagate(0)               #0強制控件不變形(當放大縮小時)

        #self.grid_slaves(0,0)獲取當前元素的子控件的第幾行第幾列的控件
        print(self.grid_slaves(0,0))        #獲取第0行0列的frame3的控件
        print(self.grid_slaves(0, 1))        #沒有第1列的frame,只有第0列的frame,故為空
        print(self.grid_slaves(1, 0))        #獲取第1行0列的frame的控件

        # print(self.selector.grid_info())  # 獲取selector控件的grid的屬性
        # print(btn.grid_info())  # 獲取btn控件的grid的屬性

        # 此處獲取控件的屬性的方法(cget()),所有控件都支持
        print(self.selector.cget('values'))             #獲取下拉框的屬性values
        print(self.selector.cget('width'))              #獲取下拉框的屬性width

        #使用config獲取屬性或者更改屬性
        # self.selector.config(values=[1,2])      #重新配置屬性values的值
        # self.selector.current(0)                #設(shè)置選擇的當前值

        #使用字典鍵值對的方式獲取屬性值,或者更改屬性值
        self.selector['values']=[1,2]             #此處的屬性的設(shè)置相當于上面的
        print(btn['text'])                  #獲取上一個按鈕控件的屬性值,打印
       # btn['text']='123'                   #對按鈕控件的屬性值更改

        self.clipboard_append('123')        #在剪切板放入數(shù)字123,可以CTR+V
        print(self.clipboard_get())         #獲取剪切板的內(nèi)容并打印
        self.clipboard_clear()              #清空剪切板內(nèi)容,再CTR+V就顯示不出了


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一個窗口,每調(diào)用一次函數(shù)就會新生成一個窗口
    application = Application(root)         #初始化一個對象,傳入窗口root
    root.mainloop()                  #無限循環(huán),不斷更新頁面

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)數(shù)據(jù)可視化案例分析

    Python實現(xiàn)數(shù)據(jù)可視化案例分析

    這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)可視化案例分析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 使用Python制作縮放自如的圣誕老人(圣誕樹)

    使用Python制作縮放自如的圣誕老人(圣誕樹)

    這篇文章主要介紹了使用Python做一個縮放自如的圣誕老人,這種動圖制作方法不僅限于圣誕老人,任何圖片理論上都是可以的。比如說,我們還可以做一棵不斷長大的圣誕樹!具體實例代碼跟隨小編一起看看吧
    2019-12-12
  • python每5分鐘從kafka中提取數(shù)據(jù)的例子

    python每5分鐘從kafka中提取數(shù)據(jù)的例子

    今天小編就為大家分享一篇python每5分鐘從kafka中提取數(shù)據(jù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實現(xiàn)遍歷讀取文件或文件夾

    Python實現(xiàn)遍歷讀取文件或文件夾

    搞機器學(xué)習或者深度學(xué)習算法很多時候需要遍歷某個目錄讀取文件,特別是經(jīng)常需要讀取某個特定后綴的文件。本文為大家準備了Python遍歷讀取文件或文件夾的示例代碼,需要的可以參考一下
    2022-08-08
  • Python中NumPy的數(shù)組拆分

    Python中NumPy的數(shù)組拆分

    這篇文章主要介紹了Python中NumPy的數(shù)組拆分,我們使用array_split()分割數(shù)組,將要分割的數(shù)組和分割數(shù)傳遞給它,如果將一個數(shù)組拆分為 3 個數(shù)組,則可以像使用任何數(shù)組元素一樣從結(jié)果中訪問它們,需要的朋友可以參考下
    2023-07-07
  • 用Python編寫簡單的gRPC服務(wù)的詳細過程

    用Python編寫簡單的gRPC服務(wù)的詳細過程

    gRPC 是可以在任何環(huán)境中運行的現(xiàn)代開源高性能 RPC 框架。接下來通過本文給大家介紹用Python編寫簡單的gRPC服務(wù)的詳細過程,感興趣的朋友一起看看吧
    2021-07-07
  • selenium3+python3環(huán)境搭建教程圖解

    selenium3+python3環(huán)境搭建教程圖解

    這篇文章主要介紹了selenium3+python3環(huán)境搭建教程圖解,需要的朋友可以參考下
    2018-12-12
  • python文件處理fileinput使用方法詳解

    python文件處理fileinput使用方法詳解

    這篇文章主要介紹了python文件處理fileinput使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-01-01
  • Python利用zhdate模塊實現(xiàn)農(nóng)歷日期處理

    Python利用zhdate模塊實現(xiàn)農(nóng)歷日期處理

    zhdate模塊統(tǒng)計從1900年到2100年的農(nóng)歷月份數(shù)據(jù)代碼,支持農(nóng)歷和公歷之間的轉(zhuǎn)化,并且支持日期差額運算。本文將利用這一模塊實現(xiàn)農(nóng)歷日期的處理,需要的可以參考一下
    2022-03-03
  • python如何代碼集體右移

    python如何代碼集體右移

    在本篇文章里小編給各位分享的是一篇關(guān)于python如何代碼集體右移的相關(guān)知識點文章,需要的朋友們可以學(xué)習下。
    2020-07-07

最新評論

县级市| 达州市| 江源县| 九台市| 伊宁县| 吉安县| 隆子县| 新昌县| 綦江县| 精河县| 登封市| 西畴县| 马关县| 青海省| 枣强县| 墨玉县| 渭南市| 遵义市| 临安市| 辽阳县| 姚安县| 南安市| 永寿县| 霍邱县| 萨嘎县| 利津县| 塘沽区| 昭通市| 上蔡县| 北碚区| 昆山市| 额敏县| 崇明县| 丰宁| 璧山县| 溧阳市| 疏勒县| 平邑县| 镇原县| 山东省| 富顺县|