如何在子帧中用Tkin点击它和相应的按钮来绘制几何图形

2024-09-29 07:19:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个框架,但不知道如何在子框架上绘制几何图形。在

以下是我当前窗口的代码:

class App:
    def __init__(self, master):
        frame = Frame(master)
        frame.grid()

        self.Quit = Button(frame, text = "QUIT", command = frame.quit)
        self.Quit.grid(row = 0, column = 48, sticky = N)

        self.adpt = Button(frame, text = "Add Point", command = self.adpt)
        self.adpt.grid(row = 0, column = 49, sticky = N)

        self.adln = Button(frame, text = "Add Line", command = self.adln)
        self.adln.grid(row = 0, column = 50, sticky = N)

        self.adpg = Button(frame, text = "Add Polygon", command = self.adpg)
        self.adpg.grid(row = 0, column = 51, stick = N)


        iframe = Frame(frame, bd = 2, relief = RAISED,  width=1000, height=500)
        iframe.grid(row = 1, columnspan = 100, sticky = N)

    def adpt(self):
        pass

    def adln(self):
        pass

    def adpg(self):
        pass

我需要通过单击相应的按钮来创建每种几何体,然后在子帧上绘制它,但是我不知道如何使用事件在子帧(iframe)中绘制几何体。例如,要绘制点,请单击“添加点”按钮。然后单击子帧生成一个点。双击子帧将点保存到点列表。在

第一个问题是如何在子框架上通过单击来绘制点。在

第二个问题是如何使子帧句柄双击并分别单击。当我双击一个小部件时,它首先经过click事件,然后是double-click事件。在

我有创建类用画布绘制几何图形。点、线、多边形类可以用画布绘制几何图形。在

以下是点类的示例代码:

^{pr2}$

Tags: textself框架def绘制columnbuttonframe
1条回答
网友
1楼 · 发布于 2024-09-29 07:19:28

如果使用按钮选择几何图形的类型,则可以在其事件处理程序上设置将要使用的类。然后可以使用事件信息的坐标在画布上绘制项目。在

self.adln = Button(frame, text = "Add Line", command=self.adln)
self.adpt = Button(frame, text = "Add Point", command=self.adpt)
self.canvas.bind("<Button-1>", self.click)

#...
def adln(self):
    self.geometry = "Line"
def adpt(self):
    self.geometry = "Points"
#...

def click(self, event):
    if self.start is None:
        self.start = (event.x, event.y)
    else:
        self.draw_geometry()
        self.start = None
def draw_geometry(self):
    if self.geometry == "Points":
        p1 = Point(*self.start)
        p2 = Point(event.x, event.y)
        p1.draw(self.canvas)
        p2.draw(self.canvas)
    elif self.geometry == "Line":
        line = Line(event.x, event.y, *self.start)
        line.draw(self.canvas)

注意构造函数的参数数目和draw方法的存在可能与您所拥有的不一致,因为这只是一个示例。这有点不押韵,但这是我说出来的最简单的方法。在

另一方面,由于事件<Button-1>总是在双击时触发,我建议您使用另一个按钮进行单独的操作,如<Button-2>或{}。在

相关问题 更多 >