簡體   English   中英

如何從列表中檢索int數據以在create_oval中使用?

[英]How do I retrieve int data from a list to use in create_oval?

我正在嘗試使用create_oval在窗口的畫布上打印5個橢圓。 我似乎無法弄清楚如何從circle.dat文件中檢索int數據,以將它們分配給xpos,ypos和radius。 X和Y是橢圓在畫布上的中心位置。 半徑就是半徑。

這是我的代碼:

from tkinter import *

class Circles:
    def __init__(self):
    self.window = Tk()
    self.window.title("My circles")
    self.window.resizable(0,0)

    self.viewer = Canvas(self.window, width=640, height=480, bg="white")

    try:
        open('circles.dat', 'r')
    except:
        print("File not found")
    else:  
        self.file = open('circles.dat', 'r') 
        self.lines = self.file.readlines()
        self.file.close()
        for i in self.lines:
            self.lines = i.split()
            if self.lines != '/n':
                for i in self.lines:
                    self.xpos = self.lines[1]
                    self.ypos = self.lines[2]
                    self.radius = self.lines[3]

    self.window.viewer.create_oval(self.xpos, self.ypos, self.radius)
    self.viewer.pack(side="top")

    self.window.mainloop()

def main():
    Circles()

main()

您沒有正確調用create_oval()

首先,應該是self.viewer.create_oval() ,注意我已經刪除了.window 其次,您期望繪制橢圓的方式不正確。 它是一個橢圓形,因此沒有圓的半徑。 這是應該如何稱呼的:

create_oval(x0, x1, y0, y1)

請參閱此處以獲取更多幫助。

接下來,如果要繪制所有圓而不是僅繪制最后一個圓,則需要縮進create_oval()使其位於最終的for循環內。

最后,即使您必須進行一些調整,也請確保確實在索引1、2和3處找到您的圓數據。

from tkinter import *

class Circles:
    def __init__(self):
        self.window = Tk()
        self.window.title("My circles")
        self.window.resizable(0,0)

        self.viewer = Canvas(self.window, width=640, height=480, bg="white")


        try:
            open('circles.dat', 'r')
        except:
            print("File not found")
        else:  
            self.file = open('circles.dat', 'r') 
            self.lines = self.file.readlines()
            self.file.close()
            print(self.lines)
            for i in self.lines:
                self.lines = i.split()
                if self.lines != '/n':
                    for i in self.lines:
                        self.xpos = self.lines[1]
                        self.ypos = self.lines[2]
                        self.radius = self.lines[3]
                        self.viewer.create_oval(self.xpos, self.ypos, self.radius, self.radius) #Testing, doubled up radius to get output

        self.viewer.pack(side="top")

        self.window.mainloop()

def main():
    Circles()
main()

這項工作對我來說:

from tkinter import *

class Circles:
    def __init__(self):
        self.window = Tk()
        self.window.title("My circles")
        self.window.resizable(0,0)

        self.viewer = Canvas(self.window, width=640, height=480, bg="white")


        try:
            open('circles.dat', 'r')
        except:
            print("File not found")
        else:  
            self.file = open('circles.dat', 'r') 
            self.lines = self.file.readlines()
            self.file.close()
            for i in self.lines:
                self.lines = i.split()
                self.xpos = int(self.lines[0])
                self.ypos = int(self.lines[1])
                self.radius = int(self.lines[2])
                self.viewer.create_oval(self.xpos-self.radius, self.ypos-self.radius, self.xpos+self.radius, self.ypos+self.radius)

        self.viewer.pack(side="top")

        self.window.mainloop()

def main():
    Circles()
main()

暫無
暫無

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

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