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

利用Tkinter(python3.6)實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器

 更新時(shí)間:2017年12月21日 10:57:00   作者:八一  
這篇文章主要給大家介紹了關(guān)于利用Tkinter(python3.6)實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

上機(jī)實(shí)踐課程開始了,嗯,老師來(lái)了之后念了下PPT,然后說(shuō):開始做吧.........

然后就開始了Python的GUI之路,以前沒(méi)接觸過(guò)PYthon的可視化界面(雖然這樣很不明智)

但是現(xiàn)在做起來(lái)感覺(jué)寫小工具還挺方便的,當(dāng)時(shí)搜到的第一個(gè)庫(kù)便是Tkinter就直接開始寫了

后來(lái)發(fā)現(xiàn)QT很不錯(cuò)的樣子,下個(gè)實(shí)驗(yàn)就用QT吧.然后關(guān)于Tkinter(python3.6)

計(jì)算器源碼 ennn.....有的命名不規(guī)范.......

首先對(duì)于python中棧的實(shí)現(xiàn)是通過(guò)list的方式模擬

pop()出棧,append()入棧

首先我們來(lái)看一下常用的TKinter提供的核心小構(gòu)件類:

小構(gòu)件類 描述
Button 按鈕
Canvas 結(jié)構(gòu)化圖形,用于繪制圖形,創(chuàng)建圖形編輯器以及實(shí)現(xiàn)自定義小構(gòu)件類
Checkbutton 單擊復(fù)選按鈕在值之間切換
Entry 文本域或稱文本框
Frame 容器(可包含其他的小構(gòu)件)
Label 顯示文本或圖像
Menu 顯示下拉菜單和彈出菜單的菜單欄
Menubutton 下拉菜單的菜單按鈕
Message 類似于標(biāo)簽顯示文本,但能自動(dòng)將文本放在給定寬高內(nèi)
Radiobutton 單選按鈕
Text 格式化的文本顯示,支持內(nèi)嵌圖片和文本,允許用不同風(fēng)格和屬性顯示和編輯文本

開始一個(gè)窗口

做一個(gè)可視化的東西,首先想到的坑定是窗口吧

窗口又有很多構(gòu)成,比如title,ico,size,bd,菜單等.

import tkinter
import os
from tkinter import *
class Calculator(object):
 """計(jì)算器"""
 def __init__(self):
 self.tk=tkinter.Tk() #實(shí)例化
 self.tk.title('計(jì)算器')
 self.tk.minsize(370,460)
 self.tk.maxsize(400,400)
 #也可以用self.tk.resizable(0, 0)來(lái)禁止調(diào)節(jié)大小
 self.tk.iconbitmap(os.getcwd()+'/favicon.ico')
 def start(self):
 self.tk.mainloop() 
if __name__ == '__main__':
 NewCalculator=Calculator()
 NewCalculator.start()

這里就生成了一個(gè)基本的窗口,對(duì)于其中的mainloop()的作用

如果我們刪除它,窗口會(huì)一閃而過(guò),它就是為了防止這種情況

面板顯示

做成計(jì)算器之后坑定要先是計(jì)算結(jié)果,這里就需要生成顯示面板

當(dāng)然我們也會(huì)很自然地聯(lián)想到顯示內(nèi)容的字體設(shè)置等需求,具體事例在下面代碼

....
import tkinter.font as tkfont
....
 #字體設(shè)置
 self.EntryFont=tkfont.Font(self.tk,size=13)
 self.ButtonFont=tkfont.Font(self.tk,size=12)
 #面板顯示
 self.count=tkinter.StringVar()
 self.count.set('0')
 self.label=tkinter.Label(self.tk,bg='#EEE9E9',bd='3',fg='black',anchor='center',font=self.EntryFont,textvariable=self.count)
 self.label.place(y=10,width=380,height=40)
....

其中tkinter中面板Lable有一些參數(shù),這里用到的基本上也可以滿足常見的需求了

其中bg是背景色,fg是前景色,改變內(nèi)容的顏色,anchor是定位內(nèi)容在面板中的位置,如下圖

方向 示例 表格
nw n ne
w center e
sw s se

關(guān)于面板以及后邊的Button的定位,可以用很多方式,place可以準(zhǔn)確的定位,也可以用pack(),grid()

對(duì)于計(jì)算器place是更好的,能夠準(zhǔn)確定位每一個(gè)控件

其中字體也可以直接在Lable()加參數(shù),例如font=("Arial,6")

textvariable相當(dāng)于“監(jiān)聽”的作用,綁定tkinter中的string,就可以用set()的方式方便的改變面板的內(nèi)容

按鈕,輸入框設(shè)置

按鈕,輸入框的參數(shù)和面板里面的是相似的

self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#EE6A50',text=self.ButtonList[0],
 font=self.ButtonFont,command=self.clear)
self.NumButton.place(x=30,y=80,width=70,height=55)
self.shiEntry=Entry(self.baoxianTk,validate='key',validatecommand=(self.checkNum,'%P'),font=self.EntryFont)
self.shiEntry.place(x=190,y=80)

一樣的是通過(guò)bg等參數(shù)設(shè)置基礎(chǔ)的樣式,只不過(guò)這里會(huì)通過(guò)command綁定事件,類似于JQ中的.click

這里的place也是為了能夠準(zhǔn)確定位才使用的,其中的relief代表著Button的樣式

relief=FLAT or GROOVE or RAISED or RIDGE or SOLID or SUNKEN

其中刪除輸入框的輸入內(nèi)容

text.delete(10) #刪除索引值為10的值
text.delete(10, 20) #刪除索引值從10到20之前的值
text.insert(0, END) #刪除所有值

輸入限制

在設(shè)計(jì)功能的時(shí)候我們可能需要用戶輸入數(shù)字等,這里可以進(jìn)行限制一下

Button參數(shù)中validate指定什么時(shí)候執(zhí)行validatecommand綁定的函數(shù),使用%P可以實(shí)時(shí)獲取輸入的內(nèi)容

當(dāng)validate選項(xiàng)指定為key的時(shí)候,有任何的輸入操作都會(huì)被攔截,這個(gè)時(shí)候返回True白能量才會(huì)輸入到Entry

self.checkNum=self.baoxianTk.register(self.validateNum)
self.gerenEntry=Entry(self.baoxianTk,validate='key',validatecommand=(self.checkNum,'%P'),font=self.EntryFont)
self.gerenEntry.place(x=190,y=190)
#驗(yàn)證是否輸入數(shù)字 
def validateNum(self,content):
 if content.isdigit() and int(content)>=0 or content=="":
 return True
 else:
 return False

validateNum()函數(shù)可以根據(jù)自己的需求進(jìn)行更改

啟用驗(yàn)證validate選項(xiàng)可以設(shè)置的值有:

名稱 事件
focus 當(dāng) Entry 組件獲得或失去焦點(diǎn)的時(shí)候驗(yàn)證
focusin 當(dāng) Entry 組件獲得焦點(diǎn)的時(shí)候驗(yàn)證
focusout 當(dāng) Entry 組件失去焦點(diǎn)的時(shí)候驗(yàn)證
key 當(dāng)輸入框被編輯的時(shí)候驗(yàn)證
all 當(dāng)出現(xiàn)上邊任何一種情況的時(shí)候驗(yàn)證

拓展符號(hào)設(shè)計(jì)

這個(gè)小計(jì)算器中我增加了%,/,sqrt三個(gè)符號(hào)

對(duì)于他們的實(shí)現(xiàn)我的思路是添加到面板之前檢測(cè)一下傳入的button內(nèi)容

如果是這三種符號(hào)則做出對(duì)應(yīng)的處理

其中需要注意如果是多位數(shù)或者帶有符號(hào)式子

不能直接進(jìn)行變換,需要判斷你要轉(zhuǎn)置的數(shù)字的位數(shù),我的具體方式如下

 def checkList(self):
 result=0
 locate=-1
 listSum=0
 for length in range(0,len(self.inputlist)):
 if re.findall(r'[-+*/]',str(self.inputlist[length])):
 result=1
 if length>locate:
  locate=length
 else:
 pass
 if result==1:
 for i in range(locate+1,len(self.inputlist)):
 listSum+=int(self.inputlist[i])*(10**(len(self.inputlist)-i-1))
 else:
 for j in range(0,len(self.inputlist)):
 listSum+=int(self.inputlist[j])*(10**(len(self.inputlist)-j-1))
 return listSum,locate
 #添加button
 def addButton(self,button):
 if button==self.ButtonList[18]:
 listSum,locate=self.checkList()
 if locate==-1:
 self.inputlist=[str(round(eval('1/'+str(listSum)),5))]
 else:
 for k in range(locate+1,len(self.inputlist)):
  del self.inputlist[k]
 self.inputlist.append(str(round(eval('1/'+str(listSum)),5)))
 elif button==self.ButtonList[19]:
 pass
 elif button==self.ButtonList[20]:
 pass
 else:
 self.inputlist.append(button)
 self.count.set(self.inputlist)

關(guān)于lambda

百度百科:Lambda表達(dá)式是Python中一類特殊的定義函數(shù)的形式,使用它可以定義一個(gè)匿名函數(shù)

與其它語(yǔ)言不同,Python的Lambda表達(dá)式的函數(shù)體只能有唯一的一條語(yǔ)句,也就是返回值表達(dá)式語(yǔ)句

搜索更多文章后理解更多,Lambda函數(shù)可以說(shuō)是對(duì)按鈕起到“call back”的作用

如果我們不使用Lambda進(jìn)行中間函數(shù)的延遲回調(diào),在創(chuàng)建按鈕的同時(shí)command綁定的函數(shù)會(huì)被調(diào)用

即如下面兩句代碼的區(qū)別,第二句在進(jìn)行創(chuàng)建時(shí)會(huì)直接執(zhí)行knobDown函數(shù)

self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#BFEFFF',text=self.ButtonList[20],  font=self.ButtonFont,command=lambda:self.knobDown(self.ButtonList[20]))
self.NumButton=tkinter.Button(master=self.tk,relief=GROOVE,bg='#BFEFFF',text=self.ButtonList[20],  font=self.ButtonFont,command=self.knobDown(self.ButtonList[20]))

更詳細(xì)的解釋可以參考文末最后兩個(gè)文章,還是前輩寫得好

關(guān)于單選框

本來(lái)想實(shí)現(xiàn)PPT中給出的示例-房貸計(jì)算的拓展,但是一直這個(gè)單選框產(chǎn)生BUG就放棄了

下面的示例是從網(wǎng)上摘抄過(guò)來(lái)的,具體的網(wǎng)址忘了

就是通過(guò)variable綁定一個(gè)IntVar() ,通過(guò).get()方式可以獲取Radiobutton中value的值

#!/usr/bin/env python
import tkinter
from tkinter import *
import tkinter.font as tkfont
root=tkinter.Tk()
val=tkinter.IntVar()
val.set(0)
def func1():
 if val.get() == 0:
 label.configure(text='radio 0')
 else:
 label.configure(text='radio 1')

label = tkinter.Label(root, text='radio 0')
label.pack()
r0 = tkinter.Radiobutton(text = 'radio0', variable = val, value = 0)
r0.pack()
r1 = tkinter.Radiobutton(text = 'radio1', variable = val, value = 1)
r1.pack()
b = tkinter.Button(root, text='button', command=func1)
b.pack()
root.mainloop()


打包

C:\Users\bayi\Desktop\shiyan\progrem
(venv) λ pip install pyinstaller
C:\Users\bayi\Desktop\shiyan\progrem
(venv) λ pyinstaller -F -w -i favicon.ico run.py

一開始因?yàn)榇a中的設(shè)置ico圖標(biāo)為下面代碼第一行

windows下打包路徑識(shí)別有問(wèn)題,把圖標(biāo)換到一個(gè)路徑短的地方

修改成絕對(duì)路徑就OK了(下面代碼第二行,exe和ico要放在同一個(gè)目錄下

self.baoxianTk.icobitmap('favicon.ico')
self.baoxianTk.iconbitmap(os.getcwd()+'/favicon.ico')

效果預(yù)覽

雖然是現(xiàn)學(xué)現(xiàn)賣和對(duì)于別人的老知識(shí),但是成功之后還是挺有成就感的(and我似乎對(duì)美工要求挑剔........

調(diào)顏色和樣式能挑半天,包括以前的那個(gè)爬蟲的前端

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 將python依賴包打包成window下可執(zhí)行文件bat方式

    將python依賴包打包成window下可執(zhí)行文件bat方式

    今天小編就為大家分享一篇將python依賴包打包成window下可執(zhí)行文件bat方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python 利用pyttsx3文字轉(zhuǎn)語(yǔ)音過(guò)程詳解

    python 利用pyttsx3文字轉(zhuǎn)語(yǔ)音過(guò)程詳解

    這篇文章主要介紹了python 利用pyttsx3文字轉(zhuǎn)語(yǔ)音過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)二叉樹的常見遍歷操作總結(jié)【7種方法】

    Python實(shí)現(xiàn)二叉樹的常見遍歷操作總結(jié)【7種方法】

    這篇文章主要介紹了Python實(shí)現(xiàn)二叉樹的常見遍歷操作,結(jié)合實(shí)例形式總結(jié)分析了二叉樹的前序、中序、后序、層次遍歷中的迭代與遞歸等7種操作方法,需要的朋友可以參考下
    2019-03-03
  • python實(shí)現(xiàn)mp3文件播放的具體實(shí)現(xiàn)代碼

    python實(shí)現(xiàn)mp3文件播放的具體實(shí)現(xiàn)代碼

    前段時(shí)間在搞一個(gè)基于python的語(yǔ)音助手,其中需要用到python播放音頻的功能,下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)mp3文件播放的具體實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-05-05
  • Python中靜態(tài)方法,類方法,屬性方法使用方法

    Python中靜態(tài)方法,類方法,屬性方法使用方法

    這篇文章主要介紹了Python中靜態(tài)方法,類方法,屬性方法使用方法,文章圍繞主題的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 基于python實(shí)現(xiàn)名片管理系統(tǒng)

    基于python實(shí)現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python好玩的項(xiàng)目—色情圖片識(shí)別代碼分享

    python好玩的項(xiàng)目—色情圖片識(shí)別代碼分享

    這篇文章主要介紹了python好玩的項(xiàng)目—色情圖片識(shí)別,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • python常見字符串處理函數(shù)與用法匯總

    python常見字符串處理函數(shù)與用法匯總

    這篇文章主要介紹了python常見字符串處理函數(shù)與用法,結(jié)合實(shí)例形式詳細(xì)分析了Python字符串操作函數(shù)find、join、replace及split功能、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python中等待5秒并暫停執(zhí)行的方法總結(jié)

    Python中等待5秒并暫停執(zhí)行的方法總結(jié)

    Python 具有各種功能和庫(kù)來(lái)創(chuàng)建交互式應(yīng)用程序,用戶可以在其中提供輸入和響應(yīng), 我們可以創(chuàng)建需要暫停應(yīng)用程序執(zhí)行的情況,本文主要和大家分享三個(gè)Python 中等待 5 秒并暫停執(zhí)行的方法,有需要的可以參考下
    2023-10-10
  • Python 可視化神器Plotly詳解

    Python 可視化神器Plotly詳解

    這篇文章主要介紹了Python 可視化神器Plotly詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

长宁区| 枣阳市| 蒲江县| 扎鲁特旗| 锦屏县| 东兴市| 定州市| 平武县| 武安市| 正定县| 封丘县| 靖宇县| 辛集市| 秭归县| 西华县| 阳信县| 荥阳市| 西盟| 广宗县| 绥棱县| 庆元县| 寿阳县| 正宁县| 日照市| 乃东县| 平罗县| 阳信县| 吉首市| 清镇市| 嘉鱼县| 海兴县| 桑植县| 大姚县| 华阴市| 景东| 广汉市| 南澳县| 通河县| 枣阳市| 桃园市| 富宁县|