【发布时间】:2020-03-16 10:54:01
【问题描述】:
我正在尝试制作一个简单的城市生成器。我已经成功地制作了指定高度的积木。
另外,我已经能够编写一个使用滑块改变块高度的脚本。
问题
- 我不能同时做这两件事。 (我想我可以解决这个问题,因为错误只是在分配之前引用)
- 使用水平滑块,我想增加建筑物的数量(可视化为通过减小宽度来增加 x 轴上的条形数量)。但是这段代码不起作用,我的意思是,它甚至没有引发错误。
到目前为止的代码
from tkinter import *
import random
bars = 5
margin = 30
heights= [5, 2, 1, 8, 4]
blocks = []
length = 600
breadth = 360
def draw():
aligner = margin
width = (breadth - margin*2)/bars
for height in heights :
block = {"height" : height }
block['rect'] = canvas.create_rectangle(aligner,550-50*height,aligner+width,550, fill="green")
block['color'] = 'green'
blocks.append(block)
aligner += width
root.update()
def wid(e):
bars = int(e)
blocks = []
heights = []
for i in range(bars):
h = random.random()*10
heights.append(h)
draw()
def h_rand(e):
factor = e
heights = [i * factor for i in heights]
draw()
root = Tk()
width = 60
aligner = 30
slider_y = Scale(root, from_=1 , to=8, bg="blue",command = h_rand)
slider_y.pack(side=LEFT)
canvas = Canvas(root,height=length,width=breadth)
canvas.pack()
for height in heights :
block = {"height" : height }
block['rect'] = canvas.create_rectangle(aligner,550-50*height,aligner+width,550, fill="green")
block['color'] = 'green'
blocks.append(block)
aligner += width
slider_x = Scale(root, from_=50 , to=200, orient = HORIZONTAL, bg="blue",command = wid)
slider_x.pack(side=TOP)
root.mainloop()
我很抱歉问题的“描述性格式不那么明确”(很高兴在 cmets 中提供更多详细信息)。这让我困扰了一段时间,我很沮丧。
【问题讨论】:
-
Hmmmm,你设置了一个变量
width和一个函数也叫width。 -
@jizhihaoSAMA 我认为这不会引发任何错误,因为命令总是将函数作为属性而不是变量。无论如何,我确实改变了它,但是,仍然没有运气!
-
由于我真的不知道你想做什么,你可以把
draw()函数改成draw(bars)。并且在你的函数wid(e)中把draw()改成draw(bars).拖动滑块时会发生一些变化。 -
@jizhihaoSAMA 它已经开始缩小以前的酒吧但没有添加新的酒吧,但感谢您帮助我前进。请告诉您是否也有解决方案
-
@jizhihaoSAMA(我知道写这个不好,但这是发自内心的)谢谢兄弟,你帮了我很多。
标签: python user-interface tkinter tkinter-canvas