Làm cách nào để sinh ra các cửa sổ con Toplevel()
trong tkinter không đóng khi cha mẹ đóng?Làm cửa sổ tokinter tkinter không sát với bố mẹ
Tôi có cần cha mẹ giữ 'số lượng tham chiếu' của cửa sổ con, chặn WM_DELETE_WINDOW
và chỉ gọi root.destroy()
khi tất cả các trẻ em đã mất?
Hoặc thực tiễn có thể chấp nhận để sinh ra một quy trình
chủ đề
khác với tk mainloop
của riêng mình?
Hoặc có cách nào thanh lịch hơn không?
EDIT
Tôi hiện đang làm việc theo cách này
root = Tk()
app = App(root) # doesn't call Toplevel()
root.mainloop()
nơi App.__init__()
thêm widget để root
mà không gọi Toplevel()
, và tại một số điểm spawns một cửa sổ mới với chức năng này:
def new_window():
root = Tk()
window = App2(root) # doesn't call Toplevel() either
Lưu ý rằng root
trong new_window()
là một biến khác với số gốc root
, thu được bằng một cuộc gọi khác đến Tk()
.
Tất cả điều này dường như làm điều đúng nghĩa là cửa sổ con sống độc lập với cha mẹ và quá trình python chết sau khi cả hai được đóng lại.
Vì vậy, câu hỏi của tôi trở nên, điều đó có ý nghĩa hay tôi đang làm điều gì đó khủng khiếp sai ở đây?
Tôi hiện đang có được một thư mục gốc mới với 'tk.Tk()' nhưng không gọi lại 'mainloop()' - điều này dường như hoạt động trong khi đơn giản hơn nhiều - bất kỳ ý tưởng nào có thể là? Bạn sẽ nghĩ rằng 'Tk()' sẽ là một singleton trở về cùng một bậc thầy, nhưng việc tạo ra các widget trên nó dường như không ảnh hưởng đến cửa sổ đầu tiên. –
Btw xem chỉnh sửa của tôi đối với câu hỏi gốc - tôi có nghĩa là quá trình không phải là chuỗi. –
Tôi không hoàn toàn chắc chắn rằng tôi hiểu câu hỏi của bạn. Có một cách đơn giản hơn nhiều so với những gì tôi hiển thị ở trên - chỉ cần sử dụng Toplevels và gọi 'root.withdraw()' - nhưng sau đó bạn có thể đóng tất cả các Toplevels và chương trình vẫn chạy trong nền. Bạn sẽ tích lũy các quá trình zombie theo cách đó. Mục đích của rigmarole ở trên là làm cho chương trình kết thúc khi Toplevel cuối cùng được đóng lại. Nếu tôi không trả lời câu hỏi của bạn, vui lòng đăng mã của bạn. – unutbu