3

我正在创建一个具有两个 Tk() 小部件的应用程序。是否可以将它们并排组合成一个更大的小部件以使应用程序更易于使用?

from tkinter import *

tk = Tk()
canvas = Canvas(tk,width=400, height=150)
canvas.pack()

tk2 = Tk()
canvas2 = Canvas(tk2,width=400, height=150)
canvas2.pack()

tk.mainloop(), tk2.mainloop()

当我这样做来制作基本窗口时,我显然得到了两个单独的窗口。能不能合二为一?

我是初学者,正在使用 python 3.3

4

2 回答 2

3

不确定它是否是您要查找的内容,但您可以在主 Tk 中创建两个框架。

import tkinter as tk

class SubWindow(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        x = tk.Text(self)
        x.pack()

class MainWindow(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self)
        self.win1 = SubWindow(self)
        self.win1.pack(side="left")
        self.win2 = SubWindow(self)
        self.win2.pack(side="right")

if __name__ == "__main__":
    main = MainWindow()
    main.mainloop()

编辑: 这是在窗口执行时使框架调整大小的代码:

import tkinter as tk

class SubWindow(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        x = tk.Text(self)
        x.pack(expand=1, fill='both')

class MainWindow(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self)
        self.win1 = SubWindow(self)
        self.win1.pack(side="left", expand=1, fill=tk.BOTH)
        self.win2 = SubWindow(self)
    self.win2.pack(side="right", expand=1, fill=tk.BOTH)

if __name__ == "__main__":
    main = MainWindow()
    main.mainloop()
于 2013-07-08T16:10:17.457 回答
1

您不应该Tk在同一个应用程序中有两个实例。如果你想要多个窗口,你应该创建Toplevel. 如果您希望所有内容都在一个窗口中,您可以创建实例Frame并按照您的意愿排列它们(并排、从上到下、在网格中等)。

虽然可能有多个 的实例Tk,但存在可能导致意外问题的副作用。Tk(在其上构建 tkinter)被设计为具有单个根小部件。

于 2013-07-08T16:18:54.470 回答