python+tkinter可視化GUI方式
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python中Tkinter?GUI編程詳細教程
- 使用Python結(jié)合Tkinter和PyAutoGUI開發(fā)精確截圖工具
- Python Tkinter創(chuàng)建GUI應(yīng)用程序的示例
- python中tkinter實現(xiàn)GUI程序三個實例教程
- Python GUI編程之tkinter模塊Toplevel控件實現(xiàn)搭建父子窗口
- 用Python?Tkinter庫GUI編程創(chuàng)建圖形用戶界面
- Python?Tkinter?Gui運行不卡頓(解決多線程解決界面卡死問題)
- Python使用tkinter模塊實現(xiàn)GUI界面的學(xué)生信息管理系統(tǒng)流程分步詳解
相關(guān)文章
Python實現(xiàn)數(shù)據(jù)可視化案例分析
這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)可視化案例分析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
python每5分鐘從kafka中提取數(shù)據(jù)的例子
今天小編就為大家分享一篇python每5分鐘從kafka中提取數(shù)據(jù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
selenium3+python3環(huán)境搭建教程圖解
這篇文章主要介紹了selenium3+python3環(huán)境搭建教程圖解,需要的朋友可以參考下2018-12-12
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

