讀書筆記:《人生給的答案II》

我人生的錢33年都在避免失敗,但最近我開始不怕失敗,反而擔心不敢冒險,因為我相信我能挺過所有失敗。 Franklin Leonard

大部分我們焦慮的事,都不會發生,所以清空那些念頭吧!別讓焦慮在腦中白吃白住。 Peter Guber

你的夢想就是現實的藍圖。Greg Norman

敢嘗試就已經領先99%的人了。 Daniel Ek

總是問自己:我漏掉了什麼?並認真聆聽答案。 Strauss Zelnick

當你覺得自己走到盡頭時,往往正是另一段旅程的起點。 Fred Rogers

任何值得做的事情,都值得慢慢去做。 Mae West

如果你發現自己面對的是公平的決鬥之中,那表示你沒有好好計畫這項任務。 Colonel David Hackworth

溜滑板可以改變世界,好好享受過程吧! Tony Hawk

行動的結果遠比行動本身重要。 Liv Boeree

我不僅用盡自己所有夢想,還能把借來的夢想都借來一用。 Woodrow Wilson

人生的格局大小與勇氣成正比。 Anais Nin

憤怒往往是痛苦在公眾場合顯現的樣貌。 Krista Tippett

想達到最強,不是挑戰極限重量,而是找到最佳重量。 Mark Bell

獨立思考,但抱持極度開放的態度。 Ray Dalio

敢於活在灰色地帶的道德勇氣......與疑問共存。終有一天,生命會給你問題的解答。 Jacqueline Novogratz

幾乎所有所謂的專家給作家的意見都是錯誤的。 Brian Koppelman

人一生最大的恩典,就是可以做自己。 Joseph Cambell

每個人都想改變世界,卻沒有人想要改變自己。 Leo Tolstoy

別忘了,貝比.魯斯不只是全壘打王,被三振的次數也是最多的。 Steve Case

沒被別人說是瘋子,就代表夢想還不夠大! Linda Rottenberg

等以後再不顧一切地追求所愛,絕對不會比此時此刻簡單。現在就放手去做吧! Tommy Vietor

不管感覺多麼真實,現實終究只是幻象(Reality is merely an illusion, albeit a very persistent one.)。 Albert Einstein

人類歷史上,從來沒有任何一個社會因為人民變得太理性而遭殃。 Sam Harris

每天醒來,我都堅信自己的潛力還未發揮到極致。「卓越」應該是動詞。 Maurice Ashely

很多企業煩惱付出小額的直接成本,但對於多餘的人力在會議室開好幾小時的會卻毫不在意。 John Arnold

如果一個想法在一開始的時候並不荒謬,那它就是沒有希望的。 Albert Einstein

可信賴的第三方其實是安全漏洞。 Nick Szabo

如果你笑不出來,就輸了。 Jon Call

人生如果不是一場大膽的冒險,就什麼都不是。 Helen Keller

長久以來,我發現一件事:有成就的人不會坐著等事情發生,而是出門去找事情做。 Leonardo Da Vinci

在最低處並不是壞事,因為你沒有別的選擇,只能往上。 Dara Torres

我相信只要望向夜空、感覺自己的渺小、對宇宙說:「哇!多麼神秘!」我們就會放下一點人類短淺的傲慢。 Caroline Paul

原創性只會發生在現實的邊緣。 Darren Aronofsky

有時候沒成的交易,才是最成功的交易。 Evan Williams

果敢行動只會片刻失足,不敢行動則會失去自我。 Soren Aabye Kierkegaard

只有在眼睛離開目標時,才會看見嚇人的阻礙。 Henry Ford

真正的士兵並不是因為憎惡眼前的人而戰,而是為了身後所愛的人而戰。 G.K. Chesterton

獨立思考。每個人對於事情運作的方式都有獨特的思維,你的想法跟其他人一樣重要。 Kelly Slater

發揮自己的極限就是最好的結果。結果如何,都是勝利。Katrín Tanja Davíðsdóttir

想在這項運動中進步,要改善自己的弱點,而不是追求別人的強項。 Mathew Fraser

不要「做自己」。字面上當然沒錯,但這句話會阻礙你進步。 Adam Fisher

不斷突破自己的極限,才有可能成就偉大的事。 Aisha Tyler

忍過第一次衝動,等待第二次的到來。 Baltasar Gracian

別花時間追尋正確的答案或道路,應該想辦法更接近自己選擇的道路。 Laura R Walker

人生不會給我們成功與滿足,人生會給我們挑戰,讓我們從中成長。 Terry Laughlin

到任何地方都要大方自在,因為你的氣勢遠比任何言語重要。 Marie Forleo

大好機會從來不會表明自己是大好機會。 Scott Belsky

十分鐘可以做很多事情。但十分鐘也一下就過了,永遠也追不回來。把人生切分為一個個十分鐘的單位,盡量把最少的單位浪費在無意義的活動上。 Ingvar Kamprad

當你以為一切都完了的那一天,就是新的開始。 Louis L'Amour

我們應該不斷重新衡量自己的思考與信念,對政治、對人生、對自己的思維。否則我們很容易變得僵化。 Tim McGraw

老了以後,我願意花多少錢倒轉時間,讓自己再次經歷此刻? Muneeb Ali

有效溝通非常重要。好的作品都需要精準的眼光。 Graig Newmark

放膽嘗試。最好的點子都是前所未見的。 Rick Rubin

沒有人有資格告訴你該如何體驗這世界。 Vlad Zamfir

當你不再在乎別人眼中的自己,你就不會再花力氣說服別人接受自己的觀點。 Peter Attia

我理解到,比起跟隨潮流,你更應該做的是看見潮流。 Steve Aoki

想在人生中成長,就要主動追求壓力。 Dr. Jim Loehr

要避免批評,就只能什麼都不說、什麼都不做,最後什麼都沒達成。 Daniel Negreanu

自律就是自由。 Jocko Willink

我們的大腦、我們的恐懼、我們認為可能的是,加上一天只有24小時的認知,讓我們對於可能與不可能有先入為主的概念。 Robert Rodriguez

別浪費任何一個危機。那是宇宙在考驗你學習一件新的事物,讓自己的潛能更上一層樓。 Kristen Ulmer

我們在學校學的東西,四十歲時可能早已過時。我建議重視培養韌性與EQ。 Yuval Noah Harari

不要把成功當成目標,愈是以成功為目標,就愈可能與之錯過。成功和幸福一樣,都不能靠追求而來......幸福只能順其自然地到來,成功也是如此。我期盼人們能傾聽自己的良知,盡自己所能將其發揚光大,久而久之—久而久之,就會看見成功。當我們早已忘記它的存在,成功才會跟著到來。 Viktor Frankl

Python 3 Tkinter介紹:一個簡易的四則運算機(A Simple Calculator with Tkinter)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

本教學文章會先介紹一些常用的Python GUI 套件工具,接著會用幾個範例呈現 Python Tkinter控制項元件的用法,最後會以一個簡易的四則運算機當例子作為結尾。

常見的 Python GUI 套件工具:
第一個 Python 3 Tkinter 視窗
建立Tkinter視窗有幾個步驟:
  1. 匯入 Tkinter 模組。
  2. 建立主視窗。
  3. 建立視窗控制項元件。
  4. 進入事件處理迴圈以處理不同的視窗訊息。
要建立一個空白的視窗的話,可以省略第三步驟,例如底下範例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/python

# 步驟一:匯入 tkinter 模組。
import tkinter
# 步驟二:建立主視窗。
mainWin = tkinter.Tk()
# 視窗標題
mainWin.title("Hello 雲林SONG")
# 視窗大小
mainWin.geometry("320x240")
# 步驟四: 進入事件處理迴圈。
mainWin.mainloop()

執行結果如下:
練習題:
修改視窗的標題(Title)。
修改視窗的大小(Geometry)。

好,接下來開始慢慢加進一些控制項吧。

標籤 Label
Label的用法說明如下:
labelVariable = Label(主元件,參數一,參數二...)

例如若想在第一個 Tkinter 視窗增加一個標籤,語法如下:
1
2
labelVariable = tkinter.Label(mainWin, text="這是標籤")
labelVariable.pack()
詳細的參數說明可參考 https://www.tutorialspoint.com/python/tk_label.htm


按鈕 Button
Button的用法說明如下:
buttonVariable = Button(主元件,參數一,參數二...)

例如若想在第一個 Tkinter 視窗增加一個按鈕,語法如下:
1
2
buttonVariable = tkinter.Button(mainWin, text="這是按鈕")
buttonVariable.pack()
詳細的參數說明可參考 https://www.tutorialspoint.com/python/tk_button.htm

文字方塊 Entry
文字方塊的用法說明如下:
entryVariable = Entry(主元件,參數一,參數二...)

例如若想在第一個 Tkinter 視窗增加一個文字方塊,語法如下:
1
2
entryVariable = tkinter.Entry(mainWin, text="這是文字方塊")
entryVariable.pack()

詳細的參數說明可參考 https://www.tutorialspoint.com/python/tk_entry.htm

單選按鈕 RadioButton
單選按鈕的用法說明如下:
radioButtonVariable = Radiobutton(主元件,參數一,參數二...)

例如若想在第一個 Tkinter 視窗增加一個單選按鈕,語法如下:
1
2
radioButtonVariable = tkinter.Radiobutton(mainWin, text="這是單選按鈕")
radioButtonVariable.pack()

詳細的參數說明可參考 https://www.tutorialspoint.com/python/tk_radiobutton.htm

將以上的範例整合在一起的結果如下圖:

若按下按鈕程式是不會有任何動作的,這是因為還需要加上處理按鈕按下的程式碼,此部分的觀念可參考筆者的文章:程式設計師需要知道的圖形使用者介面(GUI)觀念。在 Tkinter 中,每個元件(Widget)都有command參數,以Button為例,就是設定按鈕按一下(Click)時會處理的CallBack function。本例的按鈕CallBack function如下:
1
2
3
# 按鈕 Click 事件處理函式
def btnCallBack():
    tkinter.messagebox.showinfo( "雲林SONG", "按鈕Click")

接著修改Button的參數:
1
2
# 建立按鈕
buttonVariable = tkinter.Button(mainWin, text="這是按鈕", command=btnCallBack)

此時,按下按鈕就會出現如下圖的MessageBox視窗(需要import tkinter.messagebox):

好,最後使用上述的Widget來製作一個簡易的四則運算機,UI的設計方式如下:

使用Grid manager來做UI版面的排版,此部分請參考 http://effbot.org/tkinterbook/grid.htm

程式執行影片:


程式碼:
參考資料:

Python 3 網路程式入門

 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


在介紹如何使用Python來開發網路程式之前,請讀者先複習相關的網路知識,此部份可參考筆者的文章:「網路程式開發者所需要的網路知識 ( Concepts for a network programmer )」。(題外話,若想用Java程式語言來開發網路程式的話,也可參考筆者的另一篇文章:「Java 網路程式入門 ( Java network programming )」)。本文示範的作業系統為Lubunt 18.10,所使用的開發工具為 VS Code(可參考筆者的兩篇文章:Python in Visual Studio CodeDebug Python Code in Visual Studio Code)。

網路程式通常會透過 Socket API 來撰寫,而Python的 socket 模組 提供了開發人員使用Socket的界面,這部份的細節請讀者閱讀參考資料。雖然Network Socket有幾種型態(底下文字取自 https://en.wikipedia.org/wiki/Network_socket#Types):
  • Raw sockets (or raw IP sockets), typically available in routers and other network equipment. Here the transport layer is bypassed, and the packet headers are made accessible to the application, and there is no port number in the address, just the IP address.
但本篇文章只針對 Stream socket 做範例說明,此範例的 Server 簡單地顯示有 Client 端連線進來,並回傳一則簡短訊息給 Client,之後就斷線了。當然實際的網路程式通常不會一連線就準備斷線。

Server 端的程式碼:
Client 端的程式碼:
Client 用的 Bash Script:

測試畫面:

從此範例可看出一些 TCP Socket 流程(見下圖)

此 TCP Socket 流程為開發網路程式的主要觀念之一,讀者要熟悉它喔。Python還有其他網路模組,此部份可參考 https://docs.python.org/3/library/internet.html。例如此指令「python -m webbrowser -t "http://yunlinsong.blogspot.com/"」就可以呼叫瀏覽器來開啟本部落格喔!有機會再來介紹如何用Python做個簡易的聊天室吧。

參考資料:
[1] https://www.tutorialspoint.com/python/python_networking.htm
[2] https://realpython.com/python-sockets/