Como detectar localização do place

Eae.
Gostaria de sabe um jeito de eu colocar a localização de um widget em place em uma variável, no caso o x e o y em variáveis diferentes. Tem como?

E ai @deyvidd, espero que esteja tudo excelente por ai!

Vamos ver se entendi o proposto, você está criando um widget no Tkinter e está posicionando ele utilizando o place().

Você quer pegar a posição ou as informações deste widget e atribuir a alguma variável.

Se for isso eu cheguei ao seguinte código:

# -*- coding: utf-8 -*-
"""."""
import tkinter as tk


class MainWindow(tk.Tk):
    # Variáveis auxiliares que irão receber a posição atual do botão.
    x = int()
    y = int()

    def __init__(self):
        super().__init__()
        self.title(string='Janela principal')

        # icon_png = tk.PhotoImage(file='icons/icon.png')
        # self.iconphoto(False, icon_png)

        width = round(number=self.winfo_screenwidth() / 2)
        height = round(number=self.winfo_screenheight() / 2)
        self.geometry(newGeometry=f'{width}x{height}')
        self.minsize(width=width, height=height)

        self.create_widgets()

    def create_widgets(self):
        # Botão que dispara uma ação.
        button = tk.Button(
            master=self,
            text='Clique aqui',
            command=self._on_button_clicled,
        )
        button.place(x=100, y=30)

        # Botão que irá se mover.
        self.button1 = tk.Button(
            master=self,
            text=f'X = {str(self.x)} e Y = {self.y}',
        )
        self.button1.place(x=self.x, y=self.y)

    def _on_button_clicled(self):
        # Informções do botão que irá se mexer.
        widget_info = self.button1.place_info()
        print(f'Variável widget_info: {widget_info}')

        # Atribuindo o valor as variáveis x e y.
        self.x = int(widget_info['x']) + 10
        self.y = int(widget_info['y']) + 10

        # Valor atual das variáveis.
        print(f'Valor de X = {self.x}\nValor de Y = {self.y}')

        # Alterando o texto do botão.
        self.button1.config(text=f'X = {self.x} e Y = {self.y}')

        # Alterando a posição do botão.
        self.button1.place_configure(
            x=self.x,
            y=self.y,
        )


if __name__ == '__main__':
    app = MainWindow()
    app.mainloop()

Se não for isso, depois posta mais detalhes para chegarmos em um exemplo legal.

Acabei fazendo o widget se mover para poder exemplificar a mudança no valor da varável.

1 curtida

Eae.
Di uma olhada no seu exemplo e consegui adaptar. no caso é que eu acho meio difícil ver a documentação e não havia achado muita coisa sobre o mesmo, mas eu estava a fazer um teste pra “projetos” e cheguei nessa duvida mas o código final ficou assim:

from tkinter import *

window = Tk()

#variables
x = int()
y = int()


#movements
def up(event):
    widget_info = cube.place_info()
    y = int(widget_info['y']) - 10
    cube.place_configure(y=y)

def down(event):
    widget_info = cube.place_info()
    y = int(widget_info['y']) + 10
    cube.place_configure(y=y)

def left(event):
    widget_info = cube.place_info()
    x = int(widget_info['x']) - 10
    cube.config(text=f'X = {x}')
    cube.place_configure(x=x)

def right(event):
    widget_info = cube.place_info()
    x = int(widget_info['x']) + 10
    cube.place_configure(x=x)


#widget
cube = Button(height=1, width=1, bg='white')
cube.place(x=50, y=50)


#keyboard
window.bind('<Up>', func=up)
window.bind('<Down>', func=down)
window.bind('<Left>', func=left)
window.bind('<Right>', func=right)

#window settings
window.title('teste')
window.geometry('700x500+50+50')
window.mainloop()

Provavelmente o codigo não esta bem feito mas isso e coisa que eu ainda estou a aprender :v

1 curtida

Está bem feito sim!

Estamos sempre e sempre aprendendo :nerd_face:

1 curtida