国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

可能是最有顏值的Python Tkinter計(jì)算器

princekin / 1048人閱讀

摘要:上機(jī)實(shí)踐課程開(kāi)始了嗯,老師來(lái)了之后念了下,然后說(shuō)開(kāi)始做吧然后就開(kāi)始了的之路,以前沒(méi)接觸過(guò)的可視化界面雖然這樣很不明智但是現(xiàn)在做起來(lái)感覺(jué)寫小工具還挺方便的,當(dāng)時(shí)搜到的第一個(gè)庫(kù)便是就直接開(kāi)始寫了后來(lái)發(fā)現(xiàn)很不錯(cuò)的樣子,下個(gè)實(shí)驗(yàn)就用吧然后關(guān)于計(jì)算器

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

然后就開(kāi)始了Python的GUI之路,以前沒(méi)接觸過(guò)PYthon的可視化界面(雖然這樣很不明智)
但是現(xiàn)在做起來(lái)感覺(jué)寫小工具還挺方便的,當(dāng)時(shí)搜到的第一個(gè)庫(kù)便是Tkinter就直接開(kāi)始寫了
后來(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()入棧
開(kāi)始一個(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ù),這里用到的基本上也可以滿足常見(jiàn)的需求了
其中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)聽(tīng)”的作用,綁定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:UsersayiDesktopshiyanprogrem
(venv) λ pip install pyinstaller

C:UsersayiDesktopshiyanprogrem
(venv) λ pyinstaller -F -w -i favicon.ico run.py
一開(kāi)始因?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è)爬蟲的前端

參考:Tkinter控件詳解
Python數(shù)據(jù)結(jié)構(gòu)——棧
創(chuàng)建一個(gè)只能輸入數(shù)字的輸入框
Tkinter教程之Entry篇
另一個(gè)Lambda表達(dá)式教程
《Python編程》筆記(七)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41076.html

相關(guān)文章

  • Python的門面擔(dān)當(dāng) - Tkinter

    摘要:在這個(gè)窗口之上,可以添加各種輸入框按鈕文本等,可以增加對(duì)各種動(dòng)作的處理。事件要與特定的控件相綁定,比如按鈕有點(diǎn)擊事件,輸入框有按鍵事件,窗體有關(guān)閉事件等。 在大多數(shù)時(shí)候,我們都在黑黢黢的控制臺(tái)里執(zhí)行 Python 腳本。這看起來(lái)很酷很 GEEK。但對(duì)于部分場(chǎng)景下的用戶來(lái)說(shuō),這樣就不大美觀和人性化了:我們需要交互更方便的圖形化產(chǎn)品,也就是 GUI (圖形用戶界面,Graphical Us...

    Lucky_Boy 評(píng)論0 收藏0
  • Python小測(cè)試 ?2021最新男女顏值打分小系統(tǒng)標(biāo)準(zhǔn)出爐,看哭無(wú)數(shù)人...

    導(dǎo)語(yǔ)?? 哈嘍!我是木木子,今天又想我了嘛? 之前不是出過(guò)一期Python美顏相機(jī)嘛?不知道你們還記得不?這一期的話話題還是圍繞上期關(guān)于顏值方面來(lái)走。 還是原來(lái)的配方,還是原來(lái)的味道。 偶爾有女生或者說(shuō)男生都有過(guò)這樣的經(jīng)歷,偶然照鏡子的時(shí)候覺(jué)得自己美、帥到爆炸。【小編打死不會(huì)承認(rèn)的.jpg】 ? 但打開(kāi)無(wú)美顏的前置攝像頭無(wú)濾鏡,或者看到真正的漂亮小姐姐,又會(huì)感慨自己怎么能這么丑! ? 顏值打分其...

    wmui 評(píng)論0 收藏0
  • Xshell – 高顏值體驗(yàn)好Win系統(tǒng)個(gè)人免費(fèi)SSH客戶端軟件

    摘要:老蔣在前面的老牌免費(fèi)開(kāi)源遠(yuǎn)程客戶端軟件文章中有介紹到作為一款老牌免費(fèi)的遠(yuǎn)程連接工具我們很多運(yùn)維工程師也都有使用過(guò)。我個(gè)人覺(jué)得是目前在系統(tǒng)中體驗(yàn)較高顏值較好的免費(fèi)客戶端軟件。在安裝過(guò)程中,我們選擇學(xué)校個(gè)人用戶,這個(gè)是免費(fèi)資格的。老蔣在前面的PuTTY – 老牌免費(fèi)開(kāi)源Windows SSH遠(yuǎn)程客戶端軟件文章中有介紹到Putty作為一款老牌免費(fèi)的SSH遠(yuǎn)程連接工具我們很多運(yùn)維工程師也...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<