2017年10月1日 星期日

python 3 筆記 - Tkinter窗口設計(選單、按鈕、圖片、文字)

python 3 筆記 - Tkinter窗口設計(選單、按鈕、圖片、文字)

源自於
http://beanobody.blogspot.tw/2015/12/python-3-tkinter.html

#從tkinter匯入所有內建函數與模組
from tkinter import *;
#下載與安裝pillow
#http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow
#下載符合python版本的pillow後,於cmd下(最高權限),到pillow所在的路徑
#執行pip install pillow-3.0.0-cp34-none-win32.whl(此pillow為python 3.4 32bit的3.0版本)
from PIL import Image, ImageTk

#建立類別,Window,繼承Frame類別。Frame是一個類別,來自於tkinter模組,可參閱Lib/tkinter/__init__
class Window(Frame): #建立視窗實體
    #初始化設定
    def __init__(self, master = None):
        Frame.__init__(self, master); #你想要透過Frame類別傳送的參數
        self.master = master; #參考到主要的小窗口,也就是tk視窗
        self.init_window();

    #初始視窗的創建
    def init_window(self):
        #改變我們主要的小窗口的標題
        self.master.title('GUI');
        #允許小窗口去取得視窗的整個空間
        self.pack(fill=BOTH, expand=1);
        #建立一個按鈕實體
        quitButton = Button(self, text = 'Quit');
        #將按鈕放到視窗裡,座標為(10,10)
        quitButton.place(x = 10, y = 10);
        #建立一個選單實體
        menu = Menu(self.master);
        self.master.config(menu = menu);
        #建立檔案物件
        file = Menu(menu);
        #添加一個命令到選單選項,呼叫它來離開,而命令,它在client_exit事件執行
        file.add_command(label = 'Exit', command = self.client_exit);
        #添加一個File到選單
        menu.add_cascade(label = 'File', menu = file);
        #建立檔案物件
        edit = Menu(menu);
        #添加一個命令到選單選項,呼叫它來離開,而命令,它在client_exit事件執行
        edit.add_command(label = 'Undo');
        edit.add_command(label = 'Show Img', command = self.showImg);
        edit.add_command(label = 'Show Text', command = self.showText);
        #添加Undo到選單
        menu.add_cascade(label = 'Edit', menu = edit);

    def client_exit(self):
        exit();

    def showImg(self):
        load = Image.open('20151211_tkinter.jpg');
        render = ImageTk.PhotoImage(load);
        #標籤可以是文字或圖片
        img = Label(self, image = render);
        img.image = render;
        img.place(x = 50, y = 50);  #將影像放入視窗裡,座標為(50,50)

    def showText(self):
        text = Label(self, text = '成功呈現');
        text.pack();
     
#視窗的建立,只會有一個,但是你可以在視窗裡建立小窗口
root = Tk();

#視窗的大小
root.geometry('400x300');

app = Window(root); #建立一個實體

root.mainloop(); #呈現它

Python 3.4 安裝Pillow(PIL)


PIL(Python Imaging Library)是Python一個強大方便的影像處理庫,名氣也比較大。不過只支持到Python 2.7。
Pillow是PIL的一個派生分支,但如今已經發展成為比PIL本身更具活力的影像處理庫。目前最新版本是3.0.0。
o   Pillow的Github主頁:https://github.com/python-pillow/Pillow
o   Pillow的文檔(對應版本v3.0.0):https://pillow.readthedocs.org/en/latest/handbook/index.html
o   Pillow的文檔中文翻譯(對應版本v2.4.0):http://pillow-cn.readthedocs.org/en/latest/
Python 3.x 安裝Pillow
給Python安裝Pillow非常簡單,使用pip或easy_install只要一行代碼即可。
在命令行使用PIP安裝:
pip install Pillow
或在命令行使用easy_install安裝:
easy_install Pillow
安裝完成後,使用from PIL import Image就引用使用庫了。比如:
from PIL import Image
im = Image.open("bride.jpg")
im.rotate(45).show()
簡單,方便。


[Python]筆記_UI模組(tkinter)

源自於
http://chienleebug.blogspot.tw/2017/07/pythonuitkinter.html

[Python]筆記_UI模組(tkinter)

  1. Python
    • 3.6.1
  2. tkinter(圖形使用者介面套件)
    • import tkinter as tk-->載入套件
    • 主視窗名稱 = tk.TK()-->建立主視窗
    • 主視窗名稱.geometry("寬度"x"高度")-->視窗尺寸
    • 主視窗名稱.title("視窗抬頭")-->視窗抬頭
    • 元件名稱 = tk.Label(容器名稱,參數1,參數2,....)-->(標籤元件)
    • 元件名稱 = tk.Button(容器名稱,參數1,參數2,....)-->(按鈕元件)
    • textvariable-->動態取得或設定元件內容
      • tk.StringVar()-->資料型態為字串,預設為空字串
      • tk.IntVar()-->資料型態為整數,預設為0
      • tk.DoubleVar()-->資料型態為浮點數,預設為0.0
    • 文字變數.get()-->取元件文字內容
    • 文字變數.set(字串)-->設定元件文字內容
    • 元件名稱 = tk.Text(容器名稱,參數1,參數2,....)-->(文字區塊)
      • 元件名稱.insert(加入型態,字串)
        • 加入型態tk.INSERT-->將字串加入文字方塊
        • 加入型態tk.END-->將字串加入文字方塊,並結束文字方塊內容
    • 元件名稱.config(參數1,參數2,....)-->變更元件設定的參數
    • 元件名稱 = tk.Entry(容器名稱,參數1,參數2,....)-->文字編輯元件
    • 元件名稱 = tk.Radiobutton(容器名稱,參數1,參數2,....)-->選項按鈕元件
    • 元件名稱 = tk.Checkbutton(容器名稱,參數1,參數2,....)-->核取方塊元件
    • 元件名稱.pack()-->是將元件視為矩形物件顯示,提供了選項在介面中的位置,選項有:side、expand、fill。
    • 元件名稱.grid()-->是將元件使用表格方式顯示,採用行列來確定在介面中的位置,row是行;column是列。
    • 元件名稱.place()-->是通過在介面中的橫縱坐標來固定位置。
    • 視窗區塊變數 = tk.Frame(容器名稱,參數1,參數2,....)-->視窗區塊
    • 主視窗名稱.mainloop()-->進入使用者互動模式
  3. 範例
    • import tkinter as tk
    • win=tk.Tk()
    • #視窗抬頭名稱
    • win.title("Tkinter Demo")
    • #視窗小圖檔
    • win.iconbitmap('ui.ico')
    • #視窗初始尺寸,字串(寬x長+左位移+右位移),例如("450x200+10+10")
    • win.geometry("450x200")
    • #視窗禁用變更尺寸,參數可寫False或0
    • #win.resizable(False, False)
    • #視窗最小尺寸
    • win.minsize(450,200)
    • #視窗最大尺寸
    • win.maxsize(900,400)
    • #視窗設為Windows風格
    • #win.attributes("-toolwindow", 1) 
    • #視窗設為置頂視窗
    • #win.attributes("-topmost", 1) 
    • #視窗初始最大化
    • #win.state("zoomed")
    • #視窗初始最小化
    • win.iconify()
    • #視窗初始還原最小化
    • #win.deiconify()
    • #視窗背景顏色,可帶入顏色英文或代碼,可參考https://www.toodoo.com/db/color.html
    • win.configure(background='#888888')

    • def button_click():
    • win.title("Demo")

    • #建立標籤
    • label0 = tk.Label(win, text="Hello Python0!", pady=6,bg="green", fg="#000000", font=("新細明體", 12))
    • label0.place(x=0, y=40, width=150, height=40)

    • #建立按鈕
    • Button0 = tk.Button(win, text="Change Title",command=button_click)
    • Button0.place(x=0, y=80, width=150, height=40)

    • #建立可放置元件的容器 - frame1
    • fram1 = tk.Frame(win)
    • fram1.pack()
    • #建立標籤1,放入容器 - frame1
    • label1 = tk.Label(fram1, text="Hello Python1!", pady=6,bg="green", fg="#000000", font=("新細明體", 12))
    • label1.pack()

    • #建立按鈕1,放入容器 - frame1
    • Button1 = tk.Button(fram1, text="Click1")
    • Button1.pack()

    • #建立可放置元件的容器 - frame2
    • fram2 = tk.Frame(win)
    • fram2.pack()
    • #建立標籤2,放入容器 - frame2
    • label2 = tk.Label(fram2, text="Hello Python2!", pady=6,bg="green", fg="#000000", font=("新細明體", 12))
    • label2.pack()

    • #建立按鈕2,放入容器 - frame2
    • Button2 = tk.Button(fram2, text="Click2")
    • Button2.pack()
    • win.mainloop()
  4. 參考資料
    • https://twideem.github.io/pages/overcast/19880307A.html
    • https://dotblogs.com.tw/larrynung/2013/08/06/113626
    • http://khanwhlee.blogspot.tw/2017/02/python-guitkinter-tkinter.html
    • http://blog.csdn.net/wangyiyan315/article/details/16821381

TKinter EX-2


from tkinter import *

root = Tk()
root.title("HelloWorld Demo")
root.geometry("300x200")

some = Label(root, text="This Tkibter 視窗 !!", width="30", height="5")
some.pack()

root.mainloop()

TKinter EX-1


Tkinter進行程式的撰寫,大概要follow下面這樣的架構。首先要將Tkinter package import進來,import進來後宣告並設定TK物件(可以想成我們一般所說的視窗),TK物件宣告完成後接著進其他控制項的宣告與設定,用控制項兜出我們想要的視窗樣子,最後呼叫TK物件的mainloop方法啟動訊息迴圈就可以了。

from Tkinter import *

form = Tk()
...
form.mainloop()

====================

import tkinter as tk
win=tk.Tk()
win.mainloop()

第一章 數學計算程式

第一章 數學計算程式





程式列表如下

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim A1, B1, C1 As Single
        A1 = Val(TextBox1.Text)
        B1 = Val(TextBox2.Text)
        C1 = A1 + B1
        Label3.Text = C1.ToString
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim A1, B1, C1 As Single
        A1 = Val(TextBox3.Text)
        B1 = Val(TextBox4.Text)
        C1 = A1 - B1
        Label7.Text = C1.ToString
    End Sub


    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        Dim A1, B1, C1 As Single
        A1 = Val(TextBox8.Text)
        B1 = Val(TextBox7.Text)
        C1 = A1 * B1
        Label11.Text = C1.ToString
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim A1, B1, C1 As Single
        A1 = Val(TextBox6.Text)
        B1 = Val(TextBox5.Text)
        C1 = A1 / B1
        Label8.Text = C1.ToString
    End Sub

    Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        Dim W, H, BMI As Single
        W = Val(TextBox9.Text) '體重公斤
        H = Val(TextBox10.Text) '身高公分
        H = H / 100 '身高變成公尺單位
        BMI = W / Math.Pow(H, 2)
        Label16.Text = BMI.ToString
    End Sub

    Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
        Dim A1, B1, C1, Ans, I As Single
        Dim S1 As String
        A1 = Val(TextBox11.Text)
        B1 = Val(TextBox12.Text)
        C1 = Val(TextBox13.Text)
        S1 = " , "
        Ans = 0
        For I = A1 To B1 Step C1
            Ans += I
            Label23.Text = Label23.Text + S1 + I.ToString
            Label25.Text = Label25.Text + S1 + Ans.ToString
        Next

            Label22.Text = Ans.ToString
    End Sub
End Class

第二章 製作瀏覽器

第二章 製作瀏覽器



程式列表如下

Public Class Form1
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        WebBrowser1.Height = Me.ClientSize.Height - TextBox1.Height
    End Sub
   
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(TextBox1.Text)
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        WebBrowser1.GoBack()
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        WebBrowser1.GoForward()
    End Sub

    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        WebBrowser1.GoHome()
    End Sub


    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

    End Sub
End Class


  清除項目編譯快取 執行 flutter clean 重新取得套件依賴 執行 flutter pub get 完整重新編譯並執行 flutter run 1. 新增專案套件 (pubspec.yaml) 在 Flutter 專案根目錄下的 pubspec.yaml 中,新增 ...