劉任昌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()

增加出現所有圖形的函數與按鈕

影片

留言

  1. https://d10917250.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  2. https://tonydongdo.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  3. https://d10917217.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  4. https://www.blogger.com/blog/post/edit/8566905904040694772/8433032848868736686

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. https://www.blogger.com/blog/post/edit/6636358029867254966/6812447835633471153

    回覆刪除
  7. https://dd10950104.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  8. https://hung927.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  9. https://dannyyeh13.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  10. https://zirujiang0130.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  11. https://10917324.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  12. https://ruruuu23.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  13. https://kingmonkey2020.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  14. https://d10950132.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  15. https://tsaihuajaker.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  16. https://tsaichingchung.blogspot.com/2023/05/blog-post.html

    回覆刪除
  17. https://shiunpei.blogspot.com/2023/05/python-from-tkinter-import-tkinter-from.html

    回覆刪除
  18. https://chenpeiyun910103.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  19. https://aik284267.blogspot.com/2023/05/blog-post.html

    回覆刪除
  20. https://d10917206.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  21. https://d10917203.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  22. https://kenyeh123.blogspot.com/2023/05/pythonguiclass.html

    回覆刪除
  23. https://www.blogger.com/blog/post/edit/6353067039179351492/9164118840160760633

    回覆刪除

張貼留言

這個網誌中的熱門文章

2025年3月7日福斯汽車與遊戲驛站軋工事件

劉任昌利用Python讀取SPY日成交資料(繳交作業情形)

劉任昌python讀取CSV檔案SPDR標普500ETF在1993/1/29至2025/3/20