python tkinter Entry控件的焦點移動操作
話不多說。
代碼片:
# -*- coding: utf8 -*- from tkinter import * ##################################### ###--------------tk---------------- class App: def __init__(self,master): frame = Frame(master) frame.pack(expand=1) self.e1 = Entry(frame) self.e1.pack() self.e2 = Entry(frame) self.e2.pack() self.e1.bind("<Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk類不能直接傳遞參數(shù),需要lambda def focus_cg(event,e2): e2.focus_set() #焦點移到e2 def handlerAdaptor(fun, **kwds): #事件處理函數(shù)的適配器,相當于中介,那個event是從那里來的呢,我也納悶,這也許就是python的偉大之處吧 return lambda event,fun=fun,kwds=kwds: fun(event, **kwds) if __name__ == '__main__': root = Tk() app=App(root) root.mainloop()
Tkinter 事件綁定的,參數(shù)不能直接傳遞。全局變量可以使用。
不使用全局變量的方法:
self.btn = Button(frame,text=u'OK', command=lambda : handler(v=123))
事件綁定型:
self.e1.bind("<Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk類不能直接傳遞參數(shù),需要lambda def focus_cg(event,e2): e2.focus_set() #焦點移到e2 def handlerAdaptor(fun, **kwds): #事件處理函數(shù)的適配器,相當于中介,那個event是從那里來的呢,我也納悶,這也許就是python的偉大之處吧 return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
補充:Python之tkinter 文本框Entry的基本應用
Entry簡介
所謂的文本框Entry,通常是指單行的文本框,在GUI程序設計中,這是用于輸入的最基本控件,我們可以使用它輸入單行字符串,如果所輸入的字符串長度大于文本框的寬度,所輸入的文字會自動隱藏,造成部分內(nèi)容無法顯示,碰到這種狀況時可以使用箭頭鍵移動鼠標光標到看不到的區(qū)域。
文本框限定的是單行文字,如果想要處理多行文字,需要使用控件中的text
它的語法格式:
Entry(父對象, options, ...)
第一個參數(shù):父對象,表示這個文本框?qū)⒔⒃谀囊粋€窗口內(nèi)
第二個參數(shù):options,參數(shù)如下
參數(shù) | 含義 |
---|---|
borderwidth | 邊界寬度 默認是兩個像素 |
bd | 邊界寬度 默認是兩個像素 |
background | 背景色彩 |
bg | 背景色彩 |
command | 當用戶更改內(nèi)容時,會自動執(zhí)行此函數(shù) |
cursor | 當鼠標光標移至按鈕上時的形狀 |
exportselection | 如果執(zhí)行選取時,所選取的字符串會自動輸出至剪貼板 如果想要避免,可以設置exportselection=0 |
foreground | 前景色彩 |
fg | 前景色彩 |
font | 字形 |
height | 高,單位是字符高 |
highlightbackground | 當功能按鈕獲取焦點時的背景顏色 |
highlightcolor | 當工人按鈕取得焦點時的顏色 |
justify | 當有多行文字時,最后一行文字的對齊方式 |
relief | 可由此控制文字外框 默認是relief=FLAT |
selectbackground | 被選取字符串的背景色彩 |
selectborderwidth | 選取字符串時的邊界寬度 預設是1 |
selectfroeground | 被選取字符串的前景色彩 |
show | 顯示輸入字符 例如,show='*'表示顯示星號,常用于輸入密碼字段 |
state | 輸入狀態(tài) 默認是NORMAL表示可以輸入,DISABLE則表示無法輸入 |
textvariable | 文字變量 |
width | 寬,單位是字符寬 |
xscrollcommand | 在X軸使用滾動條 |
Entry的基本應用
例子:建立標簽和文本框,輸入姓名和地址
import tkinter root = tkinter.Tk() label1 = tkinter.Label(root, text="姓名 :") label2 = tkinter.Label(root, text="住址 :") label1.grid(row=0) label2.grid(row=1) entry1 = tkinter.Entry(root) entry2 = tkinter.Entry(root) entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) root.mainloop()
運行結(jié)果:
設置grid(row=0),在沒有設置column=x的情況下,系統(tǒng)自動設置column=0
使用show 參數(shù)隱藏輸入的字符
其實Entry控件具有可以使用show參數(shù)設置隱藏輸入字符的特性,所以也常被應用在用于輸入密碼的時候
例子:密碼的輸入,用*隱藏
import tkinter root = tkinter.Tk() label1 = tkinter.Label(root, text="賬號 :") label2 = tkinter.Label(root, text="密碼 :") label1.grid(row=0) label2.grid(row=1) entry1 = tkinter.Entry(root) entry2 = tkinter.Entry(root, show="*") entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) root.mainloop()
運行結(jié)果:
Entry 的 get 方法
Entry 有一個get()方法,可以利用這個方法來獲取目前Entry 的字符串內(nèi)容
import tkinter def getValue(): print("賬號為{}, 密碼為{}".format(entry1.get(), entry2.get())) root = tkinter.Tk() label1 = tkinter.Label(root, text="賬號 :") label2 = tkinter.Label(root, text="密碼 :") label1.grid(row=0) label2.grid(row=1) entry1 = tkinter.Entry(root) entry2 = tkinter.Entry(root, show="*") entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) buttonLogin = tkinter.Button(root, text="登錄", command=getValue) buttonExit = tkinter.Button(root, text="退出", command=root.quit) buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20) buttonExit.grid(row=2, column=1) root.mainloop()
運行結(jié)果:
我們輸入賬號密碼,點擊登錄
賬號為123456, 密碼為132456
控制臺就出現(xiàn)了我們所需要的的信息
Entry 的 insert() 方法
在設計GUI程序時,常常需要在建立Entry的文本框內(nèi)默認建立輸入文字,在Widget控件中可以使用insert(index, s)方法插入字符串
其中s是所插入的字符串,字符串會插在index位置
例子:建立默認文字內(nèi)容
import tkinter def getValue(): print("賬號為{}, 密碼為{}".format(entry1.get(), entry2.get())) root = tkinter.Tk() label1 = tkinter.Label(root, text="賬號 :") label2 = tkinter.Label(root, text="密碼 :") label1.grid(row=0) label2.grid(row=1) entry1 = tkinter.Entry(root) entry2 = tkinter.Entry(root, show="*") # 默認賬號內(nèi)容 entry1.insert(0, "123456") # 默認密碼內(nèi)容 entry2.insert(0, "123456") entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) buttonLogin = tkinter.Button(root, text="登錄", command=getValue) buttonExit = tkinter.Button(root, text="退出", command=root.quit) buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20) buttonExit.grid(row=2, column=1) root.mainloop()
運行結(jié)果:
Entry 的 delete() 方法
在tkinter模塊的應用中可以使用delete(first, last=None)方法刪除Entry內(nèi)的從第first字符到last-1字符間的字符串,如果要刪除整個字符串可以使用delete(0, END)
如果刪除倒數(shù)第一個,我們可以用len()方法判斷長度,然后長度減一就行
例子:單擊刪除按鈕清空文本框內(nèi)容
import tkinter def getValue(): print("賬號為{}, 密碼為{}".format(entry1.get(), entry2.get())) # 刪除的方法 def deleteValue(): entry1.delete(0, tkinter.END) entry2.delete(0, tkinter.END) root = tkinter.Tk() label1 = tkinter.Label(root, text="賬號 :") label2 = tkinter.Label(root, text="密碼 :") label1.grid(row=0) label2.grid(row=1) entry1 = tkinter.Entry(root) entry2 = tkinter.Entry(root, show="*") # 默認賬號內(nèi)容 entry1.insert(0, "123456") # 默認密碼內(nèi)容 entry2.insert(0, "123456") entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) buttonLogin = tkinter.Button(root, text="登錄", command=getValue) # 調(diào)用刪除的方法 buttonExit = tkinter.Button(root, text="刪除", command=deleteValue) buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20) buttonExit.grid(row=2, column=1) root.mainloop()
運行結(jié)果:
例子:刪除最后一個
def deleteValue(): len_entry = len(entry1.get()) entry1.delete(len_entry - 1) entry2.delete(0, tkinter.END)
運行結(jié)果:
如果只有一個參數(shù)的話,那這個參數(shù)將是first,如不是last,len_entry - 1相當于是從到底第一個開始刪除,一直到末尾
計算數(shù)學表達式使用 eval()
Python有一個非常好用的計算數(shù)學表達式的函數(shù)eval
該函數(shù)可以直接傳回此數(shù)學表達式的計算結(jié)果,它的語法格式:
"""expression為字符串""" result = eval(expression)
例子:
import tkinter def getValue(): try: value = eval(entry.get()) label2.configure(text="計算結(jié)果為:" + str(value)) except: pass root = tkinter.Tk() label = tkinter.Label(root, text="請輸入數(shù)學表達式:") label.pack(anchor=tkinter.W) entry = tkinter.Entry(root) entry.pack(pady=5) label2 = tkinter.Label(root) label2.pack() button = tkinter.Button(root, text="計算", command=getValue) button.pack(pady=5) root.mainloop()
運行結(jié)果:
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解基于python的全局與局部序列比對的實現(xiàn)(DNA)
這篇文章主要介紹了詳解基于python的全局與局部序列比對的實現(xiàn)(DNA).文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10提高Python生產(chǎn)力的五個Jupyter notebook插件
Jupyter Notebook 因其可用性和實用性而成為數(shù)據(jù)分析和機器學習模型領域最流行的 IDE,它也是很多數(shù)據(jù)初學者的首選 IDE。它最具特色的是,擁有豐富的插件、擴展數(shù)據(jù)處理能力和提升工作效率2021-11-11Anaconda下Python中GDAL模塊的下載與安裝過程
這篇文章主要介紹了Anaconda下Python中GDAL模塊的下載與安裝方法,本文介紹在Anaconda環(huán)境下,安裝Python中柵格、矢量等地理數(shù)據(jù)處理庫GDAL的方法,需要的朋友可以參考下2023-04-04Python操作mongodb數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫的方法,結(jié)合實例形式詳細分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫相關實現(xiàn)技巧,需要的朋友可以參考下2018-12-12