背景信息:
我仍在学习python,我最喜欢的事情之一是阅读我的书,当我遇到一个新概念时,我觉得很有趣,我喜欢尝试代码来制作不同的东西。所以现在我遇到了一个障碍,我似乎不知道如何绕过它。我试着搜索并找到了一些有趣的解决方案,但我似乎无法实现它们。
这是我的代码:
from tkinter import *
from random import *
def window_size(wide,tall):
tk = Tk()
canvas = Canvas(tk, width=wide, height=tall)
canvas.pack()
def random_rect(width, height):
x1 = randrange(width)
y1 = randrange(height)
x2 = x1 + randrange(width)
y2 = y1 + randrange(height)
canvas.create_rectangle(x1, y1, x2, y2) # this is the trouble line
window_size(500,500)
random_rect(200, 200)
我希望它如何工作:
所以我的想法是,我可以调用函数window_size,并将窗口设置为我希望的大小。然后,如果它有效,random_rect函数将在我的窗口中绘制一个具有随机维度的矩形。
实际情况:
window_size函数运行良好。另一方面,由于"全局名称canvas"未定义,random_rect函数在使用"canvas.create_rectangle(x1,y1,x2,y2)"时存在问题。
我尝试过在window_size中返回不同的值,但我没有找到合适的值,或者不知道如何实现它们。我试着创建类并使用self.canvas,但也无法正常工作。
如有任何帮助,我们将不胜感激。与其说是实现的问题(没有进行编码实验的实际原因),不如说是我渴望学习如何解决这个问题,因为我可以看到知道这个问题的解决方案在未来会非常有用。
感谢您的时间和帮助!
更新:
因此,多亏了下面的用户Barmar,我能够让我的代码正常工作,但我也意识到我想要实现的目标也可以通过另一种方式实现,并希望在有一天有人遇到这种情况时进行共享:
from tkinter import *
from random import *
print("How many rectangles do you want?")
numrect = int(input())
print("How wide of a window do you want?")
winwide = int(input())
print("How tall of a window do you want?")
wintall = int(input())
tk = Tk()
canvas = Canvas(tk, width=winwide, height=wintall)
canvas.pack()
def random_rect(width, height):
x1 = randrange(width)
y1 = randrange(height)
x2 = x1 + randrange(width)
y2 = y1 + randrange(height)
canvas.create_rectangle(x1, y1, x2, y2) # works good now!
for x in range(0, numrect):
random_rect(winwide/2, wintall/2)
从window_size
返回画布,然后将其作为附加参数传递给random_rect
def window_size(wide,tall):
tk = Tk()
canvas = Canvas(tk, width=wide, height=tall)
canvas.pack()
return canvas
def random_rect(canvas, width, height):
x1 = randrange(width)
y1 = randrange(height)
x2 = x1 + randrange(width)
y2 = y1 + randrange(height)
canvas.create_rectangle(x1, y1, x2, y2) # this is the trouble line
c = window_size(500,500)
random_rect(c, 200, 200)