自學Python筆記:從隨機紅包小程序學界面的使用

2021-02-13 酷教

VB隨機函數教學設計

昨天和朋友們交流時聊到,原來用VB很容易完成界面的設計,並實現用隨機函數設計的紅包程序的教學,那麼用Python如何實現?折騰的感覺是Python語言優雅、簡單,一旦遇到GUI就傻得不要不要的。昨天用了半天的完成了下面的小程序,今天分享一下思路。

Python版隨機函數的使用

其實圍繞Python有很多的GUI開發框架,如:Kivy、Flexx、PyQt、wxPython、PyGobject等等。學習者完全可以只考慮算法只負責處理業務邏輯而不糾結界面的設計,通過對比後還是選擇了標準庫自帶的Tkinter用於本次練習。

Tkinter

Tkinter是Python下面向tk的圖形界面接口庫,可以方便地進行圖形界面設計和交互操作編程。Tkinter的優點是簡單易用、與Python的結合度好。不足之處是缺少可視化界面設計工具,需要通過代碼來完成窗口設計和元素布局。不過這個也可以讓學習者在大腦中形成界面布局邏輯,也許算收穫。

Tkinter在Python 3.x下默認集成,不需要額外的安裝操作,只要安裝好 Python 之後就能 import Tkinter 庫了。

import random

from tkinter import *

master = Tk()

master.title('隨機紅包程序')

mainloop() #mainloop 是一個主循環,窗口顯示出來後等待各種消息,比如滑鼠、鍵盤等操作,本小程序只用一個。

運行上面代碼就可以看到窗口界面了,如下:

Tkinter基本應用

考慮隨機紅包程序界面主要涉及圖片、文字標籤、輸入框、按鈕、對話框,對於這幾個在這裡簡單描述一下。

1.PhotoImage

這裡我用了一個Frame,因為我發現把這些組件放進窗口排版是個大問題,用Frame可以讓思路更清晰一些,Frame就是屏幕上的一塊矩形區域,用來作為容器(container)來布局窗體的,除去Frame還有一種LabelFrame,可以定義Title。

frame = Frame(master) # 確定一個框架用於圖片顯示

frame.pack(padx = 0,pady = 0,side='left') #布局幾何管理,用來組織和管理整個父配件區中子配件的布局。Tkinter提供了截然不同的三種幾何管理類:pack、grid和place,Pack採用幾何管理採用塊的方式組織配件。

photo = PhotoImage(file="hb1.gif") #支持gif、png等類型,不支持jpg。

imgLabel = Label(frame, image=photo) # 設置標籤並綁定在frame上面

imgLabel.pack(side=TOP) # 指明位置

2.Label

這裡我重新定義了一個Frame用於布局輸入部分,其中用了grid來管理,和上面的pack有區別,這裡是為了嘗試。

Label(frame2 ,text='總金額 :').grid(row=0,column=4) #定義並顯示文字Label

Label(frame2 ,text='紅包個數 :').grid(row=1,column=4)

Label(frame2 ,text='留言 :').grid(row=2,column=4)

3.Entry

Entry 是 Tkinter 用來接收字符串等輸入的控制項,允許用戶輸入一行文字。

v1 = StringVar() # 設置用於儲存輸入數據的變量

v2 = StringVar()

v3 = StringVar()

v3.set('恭喜發財,大吉大利') #顯示信息

e1 = Entry(frame2 ,textvariable=v1) #定義輸入框

e2 = Entry(frame2 ,textvariable=v2)

e3 = Entry(frame2 ,textvariable=v3)

e1.grid(row=0,column=5,padx=10,pady=5) #利用grid布局顯示

e2.grid(row=1,column=5,padx=10,pady=5)

e3.grid(row=2,column=5,padx=10,pady=5)

4.Button

Button是一個標準的Tkinter的部件,用於實現各種按鈕的顯示和定義觸發。

theButton=Button(frame2,text='塞錢進紅包',command=callback).grid(row=5,column=4) #調用callback

showButton=Button(frame2,text='打開紅包',command=showMoney).grid(row=5,column=5) #調用showMoney

5.messagebox

自python3.0之後關於對話框的模塊(messagebox、filedialog、colorchooser)都被收歸到了tkinter的下,也就是說在import模塊的時候需要注意一下。

Tkinter提供了三種標準的對話框模塊,本次主要使用了messagebox 。

1.messagebox

2.filedialog

3.colorchooser

import tkinter.messagebox #需要單獨import這個模塊

tkinter.messagebox.showinfo(title='警告',message='你要發的錢呢?!') #顯示提示對話框

紅包算法

說到算法其實就是思考這個紅包怎麼實現分配的,為什麼有的人分的多,有的人分的少?

首先想到的就是隨機函數,然後分配時根據所發紅包大小及個數隨機分配金額,當然這個金額要做一下限制,不然分配可能更不公平,所以在計算時限定最小紅包為1分,最大不能超過平均數的2倍。基於這個思路實現紅包分配的算法如下:

#隨機紅包函數

def getRandomMoney():

global remainSize # 剩餘的紅包數量

global remainMoney # 剩餘的錢 這個是定義的全局變量,用global聲明

if (remainSize == 1): #判斷是否是最後一個紅包,如果是的話就把所有的錢都分配給它。

remainSize-=1

return round(remainMoney * 100) / 100

rnd=random.random() #定義一隨機數0~1之間。

mins = 0.01 #設定一個分配最小值

maxs = remainMoney / remainSize * 2 #設置一個分配的最大值,也就是剩餘錢數平均剩餘未分配人數的2倍。

money = rnd * maxs #在這個基礎上乘以隨機數

if (money <= mins): #如果所分配數額小於設定的最小值就按0.01計算。

money=0.01

money = round(money * 100) / 100; #這裡是為了取小數點後2位

remainSize-=1; #個數減1

remainMoney -= money; #剩餘錢數

return money;

#打開紅包

def showMoney():

if (remainSize < 1): #如果紅包取完就顯示警告信息

tkinter.messagebox.showinfo(title='警告',message='沒有紅包了!')

else:

d=getRandomMoney() #否則就計算獲得的紅包值並提示

tkinter.messagebox.showinfo(title='恭喜',message='你獲得了'+str(d)+'的紅包!')

當然整體程序完善的話還要考慮數值的輸入限制,比如錢數和紅包個數必須輸入數字。

本次主要學習tkinter的使用,如果感興趣可以嘗試其他Gui框架,或許會有更多的收穫,最後提示的是,學習中更要注意學習的方法的學習,更要注意如何解決問題的學習~

關注我,帶給您更多有趣有意義的信息~

相關焦點

  • 微信搞怪小技巧 : 紅包金額可以「隨機跳動」
    距離新年還有不到20天了,以前過年發紅包都是紅包裝現金這樣,近年微信越來越普及了,就連很多爺爺奶奶都用上微信了,派紅包都轉為微信紅包了
  • 熱議 微信紅包驚人內幕:不是隨機分配金額?原來這些人更容易搶到大紅包!
    小編就問一句話:國慶假期你搶了多少紅包?
  • 手機百度app,領隨機紅包,我領到18元現金券,直接充話費,秒到
    快錢錢包20元已經到帳,做過的朋友可以去帳戶看看手機百度app,登錄百度帳號,語音輸入「新年快樂」,會彈出紅包,點擊紅包,會送隨機紅包,有現金券,錢升錢投資抵扣券(有收的)等百度現金券可以直接充話費抵扣,我抽了一個8元,一個10元,充話費秒到,其他的券可以看下使用規則提醒一下,不是每個人都會有現金券,是隨機給的,大家可以多抽幾次活動時間:12月25號—2016年1月3號
  • 支付寶紅包又來了,金額更大,使用更便捷
    後來,隨著口令紅包的金額一降再降,降到了每個2分錢,這些「黑」科技才消停了下來,終於不再是到處「發紅包」了。可是,不甘寂寞的支付寶又推出了另一種玩法。支付寶紅包再次鋪天蓋地而來。今天一睜眼,頓時就被群裡各種炫耀的紅包淹沒了。小編自然也忍不住的試了試手氣。運氣還算不錯。
  • 小米紅包助手出爐 秒殺紅包不是夢
    為了不讓用戶錯過紅包,春節期間能夠盡享搶紅包的樂趣,小米工程師廢寢忘食,終於趕在春節前推出了小米紅包助手App。與一些紅包作弊插件不同,小米紅包助手主要提供紅包提醒功能,它不會自動為用戶拆開紅包,造成好友的反感,或者破壞微信健康生態。
  • 微信紅包新玩法:微信動態紅包
    ,紅包封面都是限量的,搶不到封面的情況在所難免,下面就教大家一個發隨機金額效果紅包和動態紅包的新方法,這個可是無限量、免費的玩法。首先在科技速報公眾號的聊天輸入框處發送「HB」,獲取動態紅包素材。隨機紅包發隨機金額紅包效果的方法很簡單,和平常我們發微信紅包步驟一樣,紅包金額越小,效果越好,發送之前一定要給紅包添加表情包,選擇我們剛才給你們的哪些素材中數字動態圖中的任意一張即可。
  • 【留言有紅包】雲帳單繳費活動最後一次啦,沒領到紅包的速度!
    在文末留言,留言前5名和後5名都可獲得微信大紅包一個。獲獎者小編會在三個工作日內回覆你喲,本次活動截止到2017年5月22日晚8點。活動中獎的親請在下期文末查看,獲獎的粉絲記得速速在後臺發消息聯繫小編,以便領取紅包。
  • 原來紅包金額分配還有這種規律丨小V趣搞機
    >>微信最大包與註冊時間有關係北京大學師生通過研究發現,搶微信紅包的金額可能並非隨機分配,而與用戶註冊時間有一定關聯。同時,研究結果還發現,用戶使用什麼手機,與領到紅包的金額沒有顯著影響。這一想法萌生於一個偶然。2016年暑假期間,在北京大學、普林斯頓大學「當代中國社會」研討課中,教授謝宇邀請一名學員共進午餐。邀請方式就是在課程的微信群中發紅包,領到金額最高的學生與教師共進午餐。
  • C語言也可以搶紅包,速度來圍觀.
    搶紅包啦,全球狂歡節。C語言搶紅包源碼+注釋//搶紅包 用了windows API#include<windows.h>#include<stdio.h>#include<string.h>#include<stdlib.h>
  • 瘋狂飛車plus領紅包
    華夏基金答題抽紅包活動期間用戶答對1題即可獲得1次抽取微信現金紅包或「ETF牛」驚喜盲盒機會。
  • 【紅包活動】必中10+,秒推
    在【活動小獎】公眾號回復關鍵詞【紅包】,系統會自動回覆你一張專屬二維碼海報。將海報發送到微信群或者朋友圈,給好友掃碼關注,每邀請1個新人好友幫你掃碼關注公眾號即可獲得1個人氣值,人氣值是累計疊加的,達到不同的人氣值則可獲得不同金額的紅包。
  • 子彈筆記:如何用印象筆記 Evernote 養成習慣
    這種文章的作者@阿爾卑斯小蜜蜂,是 5 年的印象筆記老用戶,她說自己「可以說和它一起成長,建立了自己一套使用的方法和筆記系統。」1. 什麼是子彈筆記 bullet journal ?子彈筆記是一種做快速,簡潔的做筆記方法。
  • 【注意注意】除夕紅包大戰即將爆發!小心紅包裡不是錢而是……bong!
    有數據顯示,2015年全年,安卓平臺新增惡意程序樣本1874.0萬個,分別是2013年、2014年的27.9倍和5.7倍,平均每天截獲新增惡意程序樣本高達51342個。數據 手機病毒大大增加 新增惡意程序樣本:2015全年,360網際網路安全中心累計截獲安卓平臺新增惡意程序樣本1874.0萬個,分別是2013年、2014年的27.9倍和5.7倍,平均每天截獲新增惡意程序樣本高達51342個。
  • 紅包2000萬!瘋狂16小時!
    小編先劇透一下口訣:一領 二發 三搶 四兌在「工銀信用卡」微信公眾號,點擊菜單欄中「搶紅包—領紅包」。每個整點開始發放紅包,如10:00,11:00,12:00,以此類推。每個整點時段內每人只能領取1次紅包,紅包定額100元。每時段紅包數量有限,先到先得。
  • 小程序遊戲:滾動的天空
    經常使用 iTunes 的玩家都會注意到蘋果商店每隔一段時間都會推一些優秀新遊戲到首頁上,以至於讓更多的玩家看到這些遊戲並下載來體驗。而《Rolling Sky》(滾動的天空)正是蘋果商店優秀新遊戲榜上的一員,遊戲使用的 LOGO 十分簡單,但一旦玩家打開它,就會發現這款遊戲不一般,特別是帶上耳機體驗的話,真不是一般的過癮。
  • 南平紅包 搶紅包明早開始!南平微新聞「元宵節.搶紅包」來啦!!現金+影天下3D電影券
    (以下為初步方案,若參與人數過多,我們還可能做調整改進)南平微新聞編輯部將在2015年3月5日元宵節(星期四)推出微信搶紅包活動!【活動獎品】現金200元+南平影天下3D電影券20張【參與辦法】掃描上圖二維碼加微新聞小編為好友。即:長按上圖2秒,會跳出菜單,選擇「識別圖中二維碼」即可。
  • 領紅包!哆啦A夢微信紅包封面免費領取,速領!
    gucci哆啦A夢微信紅包封面怎樣抽?提升封面個性,發紅包更為出色。
  • 【有獎品 有紅包】超人毛球器天天送 + 4月紅包活動預告
    【超人毛球器天天送】從即日起,到4月紅包活動正式開始前,每天隨機送出
  • 美的牛年抽拜年紅包
    美的牛氣沖天齊拜年抽微信紅包打開連結,完成第1個任務,即可獲得10分抽獎。
  • 2月23日最新微信紅包封面免費領取
    Hi,我是帶大家免費領新封面的雷鋒今天帶來最新的紅包封面