Я пытаюсь сделать наивный городской генератор. Я был успешным в создании блоков указанной высоты.
Кроме того, я смог написать скрипт, который изменяет высоту блока с помощью ползунка.
Задача
- I Я не могу делать обе вещи вместе. (Я думаю, что я могу решить эту проблему, потому что ошибка касается только ссылки перед назначением)
- Используя горизонтальный ползунок, я хочу увеличить количество зданий (визуализировать как увеличение количества баров на оси 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()
Извините за «не очень описательное форматирование» вопроса ( с удовольствием предоставлю более подробную информацию в комментариях ). Это беспокоит меня некоторое время, и я просто разочарован.