python使用tkinter實(shí)現(xiàn)自定義多參數(shù)對(duì)話框
參數(shù)對(duì)話框
tkinter
提供了三種參數(shù)對(duì)話框,用于輸出浮點(diǎn)型、整型和字符串,分別是 askfloat
, askinteger
以及 askstring
,使用方法如下
代碼如下
import tkinter as tk from tkinter.simpledialog import * tk.Tk() # 相當(dāng)于開啟Tkinter服務(wù) askfloat("askfloat", "please input float") # 3.1415926 askinteger("askinteger", "please input a integer number") # 299732458 askstring("askstring", "please input string") # 'tiny cool'
自定義參數(shù)對(duì)話框
這三個(gè)對(duì)話框一次只能輸入一個(gè)參數(shù),并不方便,但tkinter作為一個(gè)完備的開發(fā)框架,程序員完全可以自定義一個(gè)參數(shù)對(duì)話框,用于設(shè)置多組參數(shù)。
整體思路用到了Python中字典的地址引用的特性,即對(duì)于一個(gè)字典來說,當(dāng)其作為參數(shù)傳入一個(gè)函數(shù)后,在函數(shù)中更改某個(gè)key的值,會(huì)連帶著改變函數(shù)外的這個(gè)字典。有點(diǎn)類似于C語言中指針作為參數(shù)時(shí)的情況。
所以,接下來設(shè)計(jì)一個(gè)Tk的子類AskDct,其初始化參數(shù)為一個(gè)字典,AskDct根據(jù)這個(gè)字典的key來生成輸入控件,并根據(jù)輸入控件的輸入情況,來更改傳進(jìn)來的字典。
代碼如下
import tkinter as tk import tkinter.ttk as ttk class AskDct(tk.Tk): def __init__(self, dct): super().__init__() self.title("請(qǐng)輸入?yún)?shù)") self.dct = dct self.initWidgets() self.mainloop() def initWidgets(self): self.varDct = {} for i,key in enumerate(self.dct): self.varDct[key] = tk.StringVar() frm = tk.Frame(self) frm.pack(side=tk.TOP) ttk.Label(frm, text=key, width=10).pack(side=tk.LEFT, pady=2) ttk.Entry(frm, width=20, textvariable=self.varDct[key]).pack(side=tk.LEFT, pady=2) frm = tk.Frame(self) frm.pack(side=tk.TOP) ttk.Button(self, text="取消", width=10, command=self.btnCancel).pack(side=tk.RIGHT, pady=2) ttk.Button(self, text="確定", width=10, command=self.btnOK).pack(side=tk.RIGHT, pady=2) def btnOK(self): for key in self.dct: self.dct[key] = self.varDct[key].get() self.btnCancel() def btnCancel(self): self.destroy() self.quit()
其中,self.dct就是傳遞進(jìn)來的字典,initWidgets根據(jù)這個(gè)字典來生成左右兩列輸入控件:左邊是參數(shù)名,右邊是參數(shù)的輸入框。最下面是兩個(gè)按鈕,分別是取消按鈕和設(shè)置按鈕。
取消按鈕綁定了btnCancel函數(shù),直接銷毀對(duì)象并退出窗口,但不對(duì)字典做任何操作。而btnOK則在退出之前,對(duì)字典進(jìn)行賦值。
最后效果如下
到此這篇關(guān)于python使用tkinter實(shí)現(xiàn)自定義多參數(shù)對(duì)話框的文章就介紹到這了,更多相關(guān)python tkinter自定義對(duì)話框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?離散點(diǎn)圖畫法的實(shí)現(xiàn)
本文主要介紹了python?離散點(diǎn)圖畫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Python計(jì)算圖片數(shù)據(jù)集的均值方差示例詳解
這篇文章主要為大家介紹了Python計(jì)算圖片數(shù)據(jù)集的均值方差,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python 面向?qū)ο笾庋b、繼承、多態(tài)操作實(shí)例分析
這篇文章主要介紹了Python 面向?qū)ο笾庋b、繼承、多態(tài)操作,結(jié)合實(shí)例形式分析了Python面相對(duì)象程序設(shè)計(jì)中封裝、繼承、多態(tài)相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-11-11Django form表單與請(qǐng)求的生命周期步驟詳解
這篇文章主要介紹了Django-form表單與請(qǐng)求的生命周期,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06python實(shí)現(xiàn)類似ftp傳輸文件的網(wǎng)絡(luò)程序示例
這篇文章主要介紹了python實(shí)現(xiàn)類似ftp傳輸文件的網(wǎng)絡(luò)程序示例,需要的朋友可以參考下2014-04-04python實(shí)現(xiàn)批量處理將圖片粘貼到另一張圖片上并保存
今天小編就為大家分享一篇python實(shí)現(xiàn)批量處理將圖片粘貼到另一張圖片上并保存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例
這篇文章主要介紹了使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例,本文先是講解了什么是守護(hù)進(jìn)程,然后給出了一個(gè)Python語言的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2015-02-02python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例
這篇文章主要為大家介紹了python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01python實(shí)現(xiàn)保留小數(shù)位數(shù)的3種方法
本文主要介紹了python實(shí)現(xiàn)保留小數(shù)位數(shù)的3種方法,包括格式化字符串,format()函數(shù)和round()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03使用Python和NLTK進(jìn)行文本預(yù)處理示例詳解
文將介紹如何使用Python編程語言和NLTK(Natural Language Toolkit)庫進(jìn)行文本預(yù)處理,為后續(xù)的文本分析和機(jī)器學(xué)習(xí)任務(wù)做準(zhǔn)備,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-03-03