李東霖Python視窗使用者介面GUI類別class建構正多邊形或星形


 #李東霖Python視窗程式設計

from tkinter import * #從函式庫 tkinter 輸入所有 * 方法

from math import *    #從函式庫 math 輸入所有 * 方法

class Regular:        #定義類別Regular正多邊形

    def __init__(self, cx, cy, cr, s, t, c, w): #類別共同的設定

        self.cx, self.cy, self.cr = cx, cy, cr  #取得中心座標cx, cy, 半徑cr

        self.s, self.t = s, t    #取得邊角數目s,t尖銳程度,取代原來的k = s.get()

        self.c, self.w = c, w    #取得顏色c,寬度w

        self.u = 2 * pi / self.s #使用模組 math 圓周率 pi

        self.x, self.y = [], []

        for i in range( int(self.s * 1.5)):

            self.x.append(self.cx + self.cr*cos(i*self.u)) 

            self.y.append(self.cy + self.cr*sin(i*self.u)) 

    def draw(self):                                 #類別的方法

        for i in range( int(self.s * 1.5) - self.t):

            canvas.create_line(self.x[i], self.y[i], 

                    self.x[i + self.t], self.y[i + self.t], fill = self.c, width = self.w)

def show():          #畫圖

    poly = Regular(cx.get(), cy.get(), cr.get(), s.get(), t.get(), c.get(), w.get())

    polyList.append(poly)

    polyList[len(polyList)-1].draw()

def clear():         #清除視窗的all所有canvas圖

    canvas.delete('all')


polyList = []

xyr = (50,75,100,150,200,250,300,350,400)

st = (1,2,3,4,5,6,7,8,9,10,11,12,16,20,24,28,32)

tk = Tk()

tk.title("李東霖視窗使用者介面GUI")  #也可以定義視窗名為 window, root課本都如此習慣

canvas = Canvas(tk, width=600, height=450)

canvas.pack()

cx, cy, cr, s, t = IntVar(tk),IntVar(tk),IntVar(tk),IntVar(tk),IntVar(tk)

cx.set(xyr[3]) #預設座標 x=200

cy.set(xyr[3]) #預設座標 y=200霖

cr.set(xyr[1]) #預設半徑 r=100

s.set(st[9])   #預設邊形 8

t.set(st[0])   #預設堅度 1即凸多邊形

label1 = Label(tk, text="位置x ").pack(side=LEFT)  #距離左側

option1 = OptionMenu(tk, cx, *xyr).pack(side=LEFT)

label2 = Label(tk, text="位置y ").pack(side=LEFT)  #距離頂端

option2 = OptionMenu(tk, cy, *xyr).pack(side=LEFT)

label3 = Label(tk, text="半徑r ").pack(side=LEFT)  #半徑

option3 = OptionMenu(tk, cr, *xyr).pack(side=LEFT)

label4 = Label(tk, text="邊形s ").pack(side=LEFT)  #幾個邊

option4 = OptionMenu(tk, s, *st).pack(side=LEFT)

label5 = Label(tk, text="堅度t ").pack(side=LEFT)  #相鄰建構,尖銳度

option5 = OptionMenu(tk, t, *st).pack(side=LEFT)

label6 = Label(tk, text="顏色").pack(side=LEFT)    #顏色

c = StringVar(tk)

colorL = ('black','red', 'green', 'blue', 'purple', 'gray')

c.set(colorL[0])

option6 = OptionMenu(tk, c, *colorL).pack(side=LEFT)

label7 = Label(tk, text="寬度").pack(side=LEFT)  #寬度

w = IntVar(tk)

widthL = (1, 2, 3, 4, 5, 6)

w.set(widthL[0])

option7 = OptionMenu(tk, w, *widthL).pack(side=LEFT)

button = Button(tk, text=" 繪圖 ", command = show, bg='black',fg='white').pack(side=LEFT)

button1 = Button(tk, text="移除All", command = clear).pack(side=LEFT)

tk.mainloop()


留言

張貼留言

這個網誌中的熱門文章

李東霖python import openpyxl 處理EXCEL

李東霖python輸入openpyxl處理EXCEL檔案