簡體   English   中英

使用Tkinter幫助創建Python類

[英]Help Creating Python Class with Tkinter

如何創建一個名為“矩形”的類,我可以將其傳遞給它的坐標和顏色並將其填充到其中?

from Tkinter import *
master = Tk()

w = Canvas(master, width=300, height=300)
w.pack()

class rectangle():

    def make(self, ulx, uly, lrx, lry, color):
        self.create_rectangle(ulx, uly, lrx, lry, fill=color)


rect1 = rectangle()
rect1.make(0,0,100,100,'blue')

mainloop()

這是一種方法。 首先,要在Tk畫布上繪制矩形,您需要調用Canvas的create_rectangle方法。 我還使用__init__方法存儲矩形的屬性,因此您只需要將Canvas對象作為參數傳遞給矩形的draw()方法。

from Tkinter import *

class Rectangle():
    def __init__(self, coords, color):
        self.coords = coords
        self.color = color

    def draw(self, canvas):
        """Draw the rectangle on a Tk Canvas."""
        canvas.create_rectangle(*self.coords, fill=self.color)

master = Tk()
w = Canvas(master, width=300, height=300)
w.pack()

rect1 = Rectangle((0, 0, 100, 100), 'blue')
rect1.draw(w)

mainloop()

編輯

回答您的問題: self.coords前面的*self.coords

要在Tk畫布上創建矩形,請按如下所示調用create_rectangle方法。

Canvas.create_rectangle(x0, y0, x1, y1, option, ...)

因此,每個坐標( x0y0等)都是該方法的單獨參數。 但是,我已經將Rectangle類的坐標存儲在單個4元組中。 我可以將此單個元組傳遞給方法調用,並在其前面加上*將其解壓縮為四個單獨的坐標值。

如果我有self.coords = (0, 0, 1, 1)然后create_rectangle(*self.coords)最終將成為create_rectangle(0, 0, 1, 1)而不是create_rectangle((0, 0, 1, 1)) 注意第二個版本中的內部括號。

Python文檔在解壓縮參數列表中對此進行了討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM