Tkinter - расположение окна Toplevel () не соответствует ожиданиям - PullRequest
0 голосов
/ 26 февраля 2020

Я сейчас играю с программированием некоторого GUI с использованием tkinter и сейчас борюсь с правильной настройкой положения дочернего окна, созданного с помощью tk.Toplevel()

То, чего я хочу добиться, - это иметь свой Новое окно расположено в верхнем правом углу главного окна. Поэтому я рассчитал целевую позицию, используя winfo окна root, но даже если значения кажутся правильными с первого места, у y-позиции всегда есть смещение после установки этих значений

A маленький пример:

import tkinter as tk

def create_window():
    window = tk.Toplevel(root)
    root.update()
    x = root.winfo_x() + root.winfo_width()
    y = root.winfo_y()

    print ("winfo_x:\t\t" + str(root.winfo_x()))
    print ("winfo_y:\t\t" + str(root.winfo_y()))
    print ("winfo_w:\t\t" + str(root.winfo_width()))
    print ("winfo_h:\t\t" + str(root.winfo_height()))
    print ("target x:\t\t" + str(x))
    print ("target y:\t\t" + str(y) + "\n")

    window.geometry("+%d+%d" % (x,y))
    window.update()

    print ("actual x:\t\t" + str(window.winfo_x()))
    print ("actual y:\t\t" + str(window.winfo_y()))


root = tk.Tk()
root.geometry("800x600")
button = tk.Button(root, text="create window", command=create_window)
button.pack(side="top", fill="both", expand=1)

root.mainloop()

Например, вывод:

winfo_x:        722
winfo_y:        215
winfo_w:        800
winfo_h:        600
target x:       1522
target y:       215

actual x:       1522
actual y:       245

Так что при установке позиции с помощью geometry() кажется, что она автоматически смещает позицию y на высоту строки заголовка .

Я что-то здесь упускаю или мне действительно нужно отменить это смещение вручную? Но, как я понимаю, winfo должен возвращать положение границы окна, а не его видимой области

Редактировать

Эта проблема возникает только на моем виртуальном Ubuntu-18.04 машина - на хосте windows 7 (python 3.8.0) она работает как задумано. Я пытался python3.8 и python3.6.9 оба с tkinter 8.6

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