在python tkinter中创建椭圆形小部件时遇到问题
我在画布小部件上创建椭圆形时遇到问题,因此我在构造函数的框架上声明了一个画布小部件在python tkinter中创建椭圆形小部件时遇到问题,python,tkinter,Python,Tkinter,我在画布小部件上创建椭圆形时遇到问题,因此我在构造函数的框架上声明了一个画布小部件 class Map(Frame): def __init__(self, master = none): Frame.__init__(self, master) ....... ##lines of code c = Canvas(master, width = 500,height = 500,relief = "groove") c
class Map(Frame):
def __init__(self, master = none):
Frame.__init__(self, master)
....... ##lines of code
c = Canvas(master, width = 500,height = 500,relief = "groove")
c.pack(side = "right")
def operation(self):
.............. ##lines of code
self.createoval() ##call create oval method after loop code
def createoval(self):
x = 0
y = 0
c1 = canvas.create_oval(x-5, y-5, x+10, y+10, fill = "red")
##error map object has no create_oval.
c1.coords(c1, x, y)
c1.move(c1, 500, 500)
return c1
理想情况下,我希望在循环完成后创建椭圆形,因此我将调用处理此问题的方法,但我有两个问题
第一。我遇到的第一个问题是在画布上创建椭圆形,该画布已在构造函数中建立。当我尝试执行此操作时,会收到消息“canvas not defined”,或者当我使用self.canvas.createoval时,会收到消息“map object has no attribute canvas”
所以我的问题是如何创建一个方法,在构造函数中建立的画布上创建椭圆
第二期:
c1 = canvas.create_oval(x-5, y-5, x+10, y+10, fill = "red")
我得到一个错误,没有定义x,尽管它已经定义,并且我使用了coords()方法,但这并没有解决问题。这段代码有很多问题。下面是我在画布上创建一个椭圆形的代码(尽管给定了坐标,但部分是屏幕外的) 要解决您的一些问题:
none
时,您使用了none
。它区分大小写李>
self
的一部分。这意味着当您使用c=canvas(…
创建画布时,您需要实际拥有self.c=canvas(…
)。否则c
将只存在于\uuuuu init\uuuuu
的范围内,而不会存在于其他任何地方canvas
变量创建椭圆,但该变量从何而来?它以前从未定义过。您在\uuuu init\uuuu
方法中专门称画布变量c
,因此您需要在createoval
方法中调用它。注意,您还需要使用<代码>self.cc1.coords(c1,x,y)
大概是为了设置椭圆的位置。但是,椭圆的创建已经设置了位置,因此如果这是您的意图,那么这是一条多余的线。它也没有被正确使用。创建的变量c1
是一个简单的整数,是画布上椭圆的ID。您需要调用c使用self.c.coords(c1,x,y)
使用画布对象的oords
方法。这将把画布self.c
上的c1
椭圆的坐标重置到(x,y)位置
,但是,由于您在创建椭圆后从未更改过x
或y
,因此它会将其设置为相同的位置,您不会注意到任何更改move
时,您将看到与调用coords
时相同的问题这段代码有很多问题。下面是我在画布上创建椭圆形的代码(尽管给定了坐标,但部分是屏幕外的) 要解决您的一些问题:
none
时,您使用了none
。它区分大小写self
的一部分。这意味着当你用c=canvas(…
创建画布时,你需要实际拥有self.c=canvas(…
。否则c
将只存在于\uuuu init\uuuu
的范围内,而不会存在于其他任何地方canvas
变量创建椭圆,但该变量从何而来?它以前从未定义过。您在\uuuu init\uuuu
方法中专门称画布变量c
,因此您需要在createoval
方法中调用它。注意,您还需要使用<代码>self.cc1.coords(c1,x,y)
大概是为了设置椭圆的位置。但是,椭圆的创建已经设置了位置,因此如果这是您的意图,那么这是一条多余的线。它也没有被正确使用。创建的变量c1
是一个简单的整数,是画布上椭圆的ID。您需要调用c使用self.c.coords(c1,x,y)
使用画布对象的oords
方法。这将把画布self.c
上的c1
椭圆的坐标重置到(x,y)位置
,但是,由于您在创建椭圆后从未更改过x
或y
,因此它会将其设置为相同的位置,您不会注意到任何更改move
时,您将看到与调用coords
时相同的问题收听错误消息。当您执行
c=Canvas时(…
变量c只存在于init
方法的范围内。它不会存在于createoval
中,除非您通过说self.c
将其作为对象实例的一部分。此外,您不能在init
中调用它c
,而在createoval
中调用它e变量的名称相同。请倾听错误消息。当您执行c=Canvas时(…
变量c只存在于init
方法的范围内。它不会存在于createoval
中,除非您通过说self.c
将其作为对象实例的一部分。此外,您不能在init
中调用它c
,而在createoval
中调用它e变量的名称相同。
from tkinter import *
class Map(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.c = Canvas(master, width = 500,height = 500,relief = "groove")
self.c.pack(side = "right")
def operation(self):
self.createoval() ##call create oval method after loop code
def createoval(self):
x = 0
y = 0
c1 = self.c.create_oval(x-5, y-5, x+10, y+10, fill = "red")
return c1
m = Map(Tk())
m.createoval()