你能结合两个tkinter tk小部件吗?

时间:2013-07-08 11:49:47

标签: python widget tkinter

我正在创建一个具有两个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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

您不能在同一个应用中拥有两个Tk个实例。如果您想要多个窗口,则可以创建Toplevel的实例。如果你想在一个窗口中创建所有内容,你可以创建Frame的实例并根据需要排列它们(并排,从上到下,在网格中等)