python tkinter Entry控件的焦點(diǎn)移動(dòng)操作
話不多說(shuō)。
代碼片:# -*- 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類(lèi)不能直接傳遞參數(shù),需要lambdadef focus_cg(event,e2): e2.focus_set() #焦點(diǎn)移到e2def handlerAdaptor(fun, **kwds):#事件處理函數(shù)的適配器,相當(dāng)于中介,那個(gè)event是從那里來(lái)的呢,我也納悶,這也許就是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類(lèi)不能直接傳遞參數(shù),需要lambdadef focus_cg(event,e2): e2.focus_set() #焦點(diǎn)移到e2def handlerAdaptor(fun, **kwds):#事件處理函數(shù)的適配器,相當(dāng)于中介,那個(gè)event是從那里來(lái)的呢,我也納悶,這也許就是python的偉大之處吧 return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
補(bǔ)充:Python之tkinter 文本框Entry的基本應(yīng)用
Entry簡(jiǎn)介所謂的文本框Entry,通常是指單行的文本框,在GUI程序設(shè)計(jì)中,這是用于輸入的最基本控件,我們可以使用它輸入單行字符串,如果所輸入的字符串長(zhǎng)度大于文本框的寬度,所輸入的文字會(huì)自動(dòng)隱藏,造成部分內(nèi)容無(wú)法顯示,碰到這種狀況時(shí)可以使用箭頭鍵移動(dòng)鼠標(biāo)光標(biāo)到看不到的區(qū)域。
文本框限定的是單行文字,如果想要處理多行文字,需要使用控件中的text
它的語(yǔ)法格式:
Entry(父對(duì)象, options, ...)
第一個(gè)參數(shù):父對(duì)象,表示這個(gè)文本框?qū)⒔⒃谀囊粋€(gè)窗口內(nèi)
第二個(gè)參數(shù):options,參數(shù)如下
參數(shù) 含義 borderwidth 邊界寬度 默認(rèn)是兩個(gè)像素 bd 邊界寬度 默認(rèn)是兩個(gè)像素 background 背景色彩 bg 背景色彩 command 當(dāng)用戶更改內(nèi)容時(shí),會(huì)自動(dòng)執(zhí)行此函數(shù) cursor 當(dāng)鼠標(biāo)光標(biāo)移至按鈕上時(shí)的形狀 exportselection 如果執(zhí)行選取時(shí),所選取的字符串會(huì)自動(dòng)輸出至剪貼板 如果想要避免,可以設(shè)置exportselection=0 foreground 前景色彩 fg 前景色彩 font 字形 height 高,單位是字符高 highlightbackground 當(dāng)功能按鈕獲取焦點(diǎn)時(shí)的背景顏色 highlightcolor 當(dāng)工人按鈕取得焦點(diǎn)時(shí)的顏色 justify 當(dāng)有多行文字時(shí),最后一行文字的對(duì)齊方式 relief 可由此控制文字外框 默認(rèn)是relief=FLAT selectbackground 被選取字符串的背景色彩 selectborderwidth 選取字符串時(shí)的邊界寬度 預(yù)設(shè)是1 selectfroeground 被選取字符串的前景色彩 show 顯示輸入字符 例如,show=’*’表示顯示星號(hào),常用于輸入密碼字段 state 輸入狀態(tài) 默認(rèn)是NORMAL表示可以輸入,DISABLE則表示無(wú)法輸入 textvariable 文字變量 width 寬,單位是字符寬 xscrollcommand 在X軸使用滾動(dòng)條 Entry的基本應(yīng)用例子:建立標(biāo)簽和文本框,輸入姓名和地址
import tkinterroot = 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()
運(yùn)行結(jié)果:
設(shè)置grid(row=0),在沒(méi)有設(shè)置column=x的情況下,系統(tǒng)自動(dòng)設(shè)置column=0
使用show 參數(shù)隱藏輸入的字符其實(shí)Entry控件具有可以使用show參數(shù)設(shè)置隱藏輸入字符的特性,所以也常被應(yīng)用在用于輸入密碼的時(shí)候
例子:密碼的輸入,用*隱藏
import tkinterroot = tkinter.Tk()label1 = tkinter.Label(root, text='賬號(hào) :')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()
運(yùn)行結(jié)果:
Entry 有一個(gè)get()方法,可以利用這個(gè)方法來(lái)獲取目前Entry 的字符串內(nèi)容
import tkinterdef getValue(): print('賬號(hào)為{}, 密碼為{}'.format(entry1.get(), entry2.get()))root = tkinter.Tk()label1 = tkinter.Label(root, text='賬號(hào) :')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()
運(yùn)行結(jié)果:
我們輸入賬號(hào)密碼,點(diǎn)擊登錄
賬號(hào)為123456, 密碼為132456
控制臺(tái)就出現(xiàn)了我們所需要的的信息
Entry 的 insert() 方法在設(shè)計(jì)GUI程序時(shí),常常需要在建立Entry的文本框內(nèi)默認(rèn)建立輸入文字,在Widget控件中可以使用insert(index, s)方法插入字符串
其中s是所插入的字符串,字符串會(huì)插在index位置
例子:建立默認(rèn)文字內(nèi)容
import tkinterdef getValue(): print('賬號(hào)為{}, 密碼為{}'.format(entry1.get(), entry2.get()))root = tkinter.Tk()label1 = tkinter.Label(root, text='賬號(hào) :')label2 = tkinter.Label(root, text='密碼 :')label1.grid(row=0)label2.grid(row=1)entry1 = tkinter.Entry(root)entry2 = tkinter.Entry(root, show='*')# 默認(rèn)賬號(hào)內(nèi)容entry1.insert(0, '123456')# 默認(rèn)密碼內(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()
運(yùn)行結(jié)果:
在tkinter模塊的應(yīng)用中可以使用delete(first, last=None)方法刪除Entry內(nèi)的從第first字符到last-1字符間的字符串,如果要?jiǎng)h除整個(gè)字符串可以使用delete(0, END)
如果刪除倒數(shù)第一個(gè),我們可以用len()方法判斷長(zhǎng)度,然后長(zhǎng)度減一就行
例子:?jiǎn)螕魟h除按鈕清空文本框內(nèi)容
import tkinterdef getValue(): print('賬號(hào)為{}, 密碼為{}'.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='賬號(hào) :')label2 = tkinter.Label(root, text='密碼 :')label1.grid(row=0)label2.grid(row=1)entry1 = tkinter.Entry(root)entry2 = tkinter.Entry(root, show='*')# 默認(rèn)賬號(hào)內(nèi)容entry1.insert(0, '123456')# 默認(rèn)密碼內(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()
運(yùn)行結(jié)果:
例子:刪除最后一個(gè)
def deleteValue(): len_entry = len(entry1.get()) entry1.delete(len_entry - 1) entry2.delete(0, tkinter.END)
運(yùn)行結(jié)果:
如果只有一個(gè)參數(shù)的話,那這個(gè)參數(shù)將是first,如不是last,len_entry - 1相當(dāng)于是從到底第一個(gè)開(kāi)始刪除,一直到末尾
計(jì)算數(shù)學(xué)表達(dá)式使用 eval()Python有一個(gè)非常好用的計(jì)算數(shù)學(xué)表達(dá)式的函數(shù)eval
該函數(shù)可以直接傳回此數(shù)學(xué)表達(dá)式的計(jì)算結(jié)果,它的語(yǔ)法格式:
'''expression為字符串'''result = eval(expression)
例子:
import tkinterdef getValue(): try:value = eval(entry.get())label2.configure(text='計(jì)算結(jié)果為:' + str(value)) except:passroot = tkinter.Tk()label = tkinter.Label(root, text='請(qǐng)輸入數(shù)學(xué)表達(dá)式:')label.pack(anchor=tkinter.W)entry = tkinter.Entry(root)entry.pack(pady=5)label2 = tkinter.Label(root)label2.pack()button = tkinter.Button(root, text='計(jì)算', command=getValue)button.pack(pady=5)root.mainloop()
運(yùn)行結(jié)果:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 解決Android Studio 格式化 Format代碼快捷鍵問(wèn)題2. php解決注冊(cè)并發(fā)問(wèn)題并提高QPS3. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問(wèn)題4. 在Chrome DevTools中調(diào)試JavaScript的實(shí)現(xiàn)5. Springboot 全局日期格式化處理的實(shí)現(xiàn)6. SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)7. Java使用Tesseract-Ocr識(shí)別數(shù)字8. vue實(shí)現(xiàn)web在線聊天功能9. JS原生2048小游戲源碼分享(全網(wǎng)最新)10. Python使用urlretrieve實(shí)現(xiàn)直接遠(yuǎn)程下載圖片的示例代碼
