【问题标题】:Can you combine two tkinter tk widgets?你能结合两个 tkinter tk 小部件吗?
【发布时间】:2013-07-05 17:45:40
【问题描述】:

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

【问题讨论】:

    标签: python widget tkinter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      不确定它是否是您要查找的内容,但您可以在主 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()
      

      【讨论】:

      • 谢谢。这很有意义。
      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2012-03-10
      • 2023-03-04
      • 2021-05-30
      相关资源
      最近更新 更多