Почему порядок моих окон tkinter меняется, когда «последнее» окно выполняет другую программу tkinter с помощью popen?Python

Программы на Python
Anonymous
 Почему порядок моих окон tkinter меняется, когда «последнее» окно выполняет другую программу tkinter с помощью popen?

Сообщение Anonymous »

У меня есть приложение tkinter с несколькими окнами, которые часто располагаются друг над другом в стеке окон, так что видно только самое верхнее окно. В этом самом верхнем окне я могу нажать кнопку, которая заставит одно из невидимых окон запустить popen. Запущенный процесс также является приложением tkinter и автоматически завершается через несколько миллисекунд. После этого, без каких-либо других действий со стороны пользователя, самое верхнее окно перемещается за второе окно моего стека окон, а второе окно становится самым верхним окном.
Почему это так? Как мне сохранить самое верхнее окно наверху?
В моем примере кода вам нужно создать несколько окон с помощью кнопки «Новое окно». Затем переместите все окна друг на друга в том порядке, в котором указан номер окна. Поместите окно с номером 1 самым верхним окном. Затем нажмите «Запустить в последнем окне», и появится новое другое окно. Нажмите там кнопку «выход» и тогда окно с номером 2 выскочит на передний план.
import tkinter as tk
import subprocess
all_windows = []
count = 1
class ButtonWindow(tk.Toplevel):
def __init__(self):
global count
super().__init__()
self.title(count)
count += 1
button_new = tk.Button(self, command=ButtonWindow, text="new window", width=50)
button_run = tk.Button(self, command=self.run_in_last_window, text="run in last window", width=50)
button_new.grid()
button_run.grid()
all_windows.append(self)
def run_in_last_window(self):
last_window = all_windows[-1]
last_window.run_popen()
def run_popen(self):
print("run popen in", self)
command_array = ["Py", "-c", "import tkinter as tk; root=tk.Tk();b=tk.Button(root,text='exit',command=exit);b.grid();root.mainloop()"]
process = subprocess.Popen(command_array, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in process.stdout:
print("line =", line)
process.wait()
root = tk.Tk()
root.withdraw()
ButtonWindow()
root.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/797 ... w-executes

Вернуться в «Python»