Как заставить ползунок изменить у-положение овала вместо его радиуса - PullRequest
0 голосов
/ 25 мая 2018
import tkinter #often people import tkinter as *

#####
# Create root window 
####
root = tkinter.Tk()

#####
# Create Model
######
radius_intvar = tkinter.IntVar()
radius_intvar.set(100) #initialize radius
# center of circle
x = 150 
y = 150

######
# Create Controller
#######
# Event handler for slider
def radius_changed(new_intval):
    # Get data from model
    # Could do this: r = int(new_intval)
    r = radius_intvar.get()
    # Controller updating the view
    canvas.coords(circle_item, x-r, y-r, x+r, y+r)
# Instantiate and place slider
radius_slider = tkinter.Scale(root, from_=1, to=150, variable=radius_intvar,    
                              label='Radius', command=radius_changed)
radius_slider.grid(row=1, column=0, sticky=tkinter.W)
# Create and place directions for the user
text = tkinter.Label(root, text='Drag slider \nto adjust\ncircle.')
text.grid(row=0, column=0)

######
# Create View
#######
# Create and place a canvas
canvas = tkinter.Canvas(root, width=300, height=300, background='#FFFFFF')
canvas.grid(row=0, rowspan=2, column=1)

# Create a circle on the canvas to match the initial model
r = radius_intvar.get()
circle_item = canvas.create_oval(x-r, y-r, x+r, y+r, 
                                 outline='#000000', fill='#00FFFF')
#######
# Event Loop
#######
root.mainloop()

Этот код в настоящее время просто меняет радиус овала.Как сделать так, чтобы ползунок изменил положение y овала (вверх и вниз), сохраняя при этом исходный размер овала.

Я не могу понять, как это сделать, мои реализации делают овалочень маленький, то поменяй месторасположение.Я хочу сохранить первоначальный размер. Возможно ли это?

1 Ответ

0 голосов
/ 25 мая 2018

Это потому, что вы настраиваете радиус, а не значение y для «центра» овала.

# Create Model
######
##radius_intvar = tkinter.IntVar()
radius_intvar.set(100) #initialize radius
yNew_intvar = tkinter.IntVar()
yNew_intvar.set(150)  ##initialize y-location
# center of circle
x = 150 
y = 150

yNew = yNew_intvar.get()
# Controller updating the view
canvas.coords(circle_item, x, y-yNew, x, y+yNew)
# Instantiate and place slider
yNew_slider = tkinter.Scale(root, from_=1, to=150, variable=yNew_intvar,    
                              label='Y-Value', command=yNew_changed)
yNew_slider.grid(row=1, column=0, sticky=tkinter.W)

Так что-то вроде выше ...

...