我尝试使用create_oval在窗口的画布上打印5个椭圆。我似乎无法弄清楚如何从circles.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()
答案 0 :(得分:1)
您没有正确地呼叫create_oval()
。
首先,它应该是self.viewer.create_oval()
,请注意我已删除.window
。其次,你期望绘制椭圆的方式是不正确的。它是一个椭圆形,因此它没有圆形半径。这是应该如何调用的:
create_oval(x0, x1, y0, y1)
请参阅here以获取更多帮助。
接下来,如果你想绘制所有的圆而不是最后一个圆,你需要缩进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()
答案 1 :(得分:0)
这项工作对我来说:
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()