[英]trouble creating oval widgets in 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.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
理想情況下,我想要的是在循環結束后創建橢圓形狀,所以我會調用處理這個的方法,但是我有兩個問題。
1。 我遇到的第一個問題是在構造函數中建立的畫布上創建橢圓。 當我嘗試這樣做時,我得到消息“畫布未定義”或當我使用self.canvas.createoval時,我收到消息“地圖對象沒有屬性畫布”
所以我的問題是如何創建一個可以在構造函數中建立的畫布上創建橢圓的方法?
第二期:
c1 = canvas.create_oval(x-5, y-5, x+10, y+10, fill = "red")
我得到的錯誤是x未定義,即使它已經定義並且我已經使用了coords()方法,但這並沒有解決問題。
你對這段代碼有很多問題。 下面是在我的畫布上創建一個橢圓形的代碼(雖然給出了你的坐標,它部分偏離屏幕)。
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()
解決您的一些問題:
none
,當你應該使用None
。 區分大小寫! self
一部分。 這意味着當您使用c = Canvas(...
創建c = Canvas(...
您需要實際擁有self.c = Canvas(...
否則c
將僅存在於__init__
的范圍內,並且不會存在於其他任何地方。 canvas
變量創建橢圓,但此變量來自何處? 它以前從未定義過。 您在__init__
方法中專門調用了canvas變量c
,因此您需要在createoval
方法中調用它。 請注意,您還需要使用self.c
c1.coords(c1,x,y)
這一行來設置橢圓的位置。 但是橢圓的創建已經設定了位置,所以如果這是你的意圖,這是一條冗余線。 它也沒有被正確使用。 創建的變量c1
是一個簡單的整數,它是畫布上橢圓的ID。 您需要使用self.c.coords(c1,x,y)
使用canvas對象調用coords
方法。 這會將畫布self.c
上c1
橢圓的坐標重置為位置(x,y)
,但是由於在創建橢圓后你從未改變過x
或y
,它會將它設置為相同的位置而你不會注意任何變化。 move
呼叫就像你對coords
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.