Переместить два windows вместе tkinter - PullRequest
1 голос
/ 14 апреля 2020

У меня есть два типа windows: главный и детский. Когда я двигаюсь по основному, все дети windows тоже должны двигаться. Поэтому я попытался написать метод, но я новичок в Tkinter, так что это немного сложно. Разве нет такого метода, который уже предоставляет Tkinter? Возникают две ошибки:

строка 21, в move_me, если second_window! = None: NameError: имя 'second_window' не определено

wm_geometry () принимает от 1 до 2 позиционных аргументов, но 3 были даны

'' 'импорт tkinter как tk из tkinter import * из tkinter import Tk из functools частичный импорт из tkinter import filedialog import tkinter as tk

root=Tk()

def second_window_X():
    global second_window
    second_window=Tk()
    label=Label(second_window, text='window')
    label.pack()

button=Button(root, text='second window', command=second_window_X)
button.pack()

def move_me(event):
    if second_window != None:
        x = root.winfo_x()
        y = root.winfo_y()
        second_window.geometry(x,y)
root.bind("<Configure>", move_me)

root.mainloop()````

Есть ли кто-то, кто может приведите пример, как связать оба windows togehter и заставить их двигаться одновременно? И кто может объяснить мне, почему переместить меня не знает second_window, даже если я объявил его глобальным?

Большое спасибо уже

Извините за все операции импорта

1 Ответ

1 голос
/ 14 апреля 2020

Как я предложил в комментарии, у вас не должно быть двух экземпляров Tk в приложении. Ваше второе окно должно быть экземпляром Toplevel.

Приведенный ниже код перемещает второе окно при перемещении / изменении размера первого окна.

from tkinter import *

root=Tk()

second_window = None

def second_window_X():
    global second_window
    second_window=Toplevel(root)
    label=Label(second_window, text='window')
    label.pack()

button=Button(root, text='second window', command=second_window_X,width=100)
button.pack()

def move_me(event):
    try:
        if second_window != None:
            x = root.winfo_x()
            y = root.winfo_y()
            second_window.geometry(f"+{x}+{y}")
    except NameError:
        pass
root.bind("<Configure>", move_me)

root.mainloop()
...