簡體   English   中英

在python tkinter中創建橢圓小部件的麻煩

[英]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()

解決您的一些問題:

  1. 你用none ,當你應該使用None 區分大小寫!
  2. 創建對象時,如果希望對象的該實例知道變量,則需要將其作為self一部分。 這意味着當您使用c = Canvas(...創建c = Canvas(...您需要實際擁有self.c = Canvas(...否則c將僅存在於__init__的范圍內,並且不會存在於其他任何地方。
  3. 您嘗試使用canvas變量創建橢圓,但此變量來自何處? 它以前從未定義過。 您在__init__方法中專門調用了canvas變量c ,因此您需要在createoval方法中調用它。 請注意,您還需要使用self.c
  4. 您可能使用c1.coords(c1,x,y)這一行來設置橢圓的位置。 但是橢圓的創建已經設定了位置,所以如果這是你的意圖,這是一條冗余線。 它也沒有被正確使用。 創建的變量c1是一個簡單的整數,它是畫布上橢圓的ID。 您需要使用self.c.coords(c1,x,y)使用canvas對象調用coords方法。 這會將畫布self.cc1橢圓的坐標重置為位置(x,y) ,但是由於在創建橢圓后你從未改變過xy ,它會將它設置為相同的位置而你不會注意任何變化。
  5. 你會看到同樣的問題,你的move呼叫就像你對coords

暫無
暫無

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

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