Виджеты не размещаются в нужной позиции - Tkinter Python - PullRequest
0 голосов
/ 06 июня 2018

У меня странная проблема с Tkinter.Итак, у меня есть окно 1000x1000, и у меня есть несколько ярлыков вокруг окна.Метки были размещены пользователем с помощью функции перетаскивания, и каждая метка была динамически создана с использованием словаря.После того, как позиционирование выполнено, при нажатии на метку вызывается следующая функция (через метод bind, и каждая метка была доступна через словарь).

def moveNattack(event):
    Ycord =  window.winfo_pointery()
    Xcord = window.winfo_pointerx()
    print(Xcord, Ycord)
    ex = tk.Label(window, text = 'X', relief = 'raised', background = 'firebrick3', width = 2, height = 1)
    if Ycord < 500:
        ex.place_forget()
        ex.place(x = Xcord, y = Ycord + 20)

Что я пытаюсь сделатьсоздать другую метку с "X" в качестве текста с именем ex.Если щелкнуть метку выше метки 500 пикселей, я хочу, чтобы ex располагался на 20 пикселей ниже метки, на которую нажали.

Итак, проблема, с которой я сталкиваюсь, заключается в том, что по какой-то случайной причине ex располагается примерно на 10-100 пикселей вправо, хотя координаты в функции выше должны располагать ex ниже нажатой кнопки.этикетка.Помощь будет принята с благодарностью.

Кроме того, здесь приведен словарь, в котором команда list(range(...)) создала переменные, которые будут назначены меткам в другой функции.

troops = {
    'playerOne' : {
        'gunner' : list(range(4)),
        'rifle' : list(range(6)),
        'rocket' : list(range(2)),
        'machinegun' : list(range(4)),
        'tank' : list(range(3))
    },
    'playerTwo' : {
        'gunner' : list(range(4)),
        'rifle' : list(range(6)),
        'rocket' : list(range(2)),
        'machinegun' : list(range(4)),
        'tank' : list(range(3))
    }
}

И этоЭто картинка моей проблемы: enter image description here

Пожалуйста, прокомментируйте, если у вас есть вопросы.

1 Ответ

0 голосов
/ 07 июня 2018

Извините за потраченное время, ребята, но я только что понял, что вам нужно вычесть позиции мыши из корневых позиций.winfo_pointerx и winfo_pointery оба возвращают координаты относительно всего экрана компьютера, и чтобы получить координаты в окне программы, вам необходимо вычесть из нее winfo_rootx и winfo_rooty.Надеюсь, что это поможет кому-то еще с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...