【问题标题】:How to create multiply tabs for class in tkinter如何在 tkinter 中为类创建多个选项卡
【发布时间】:2019-10-06 09:20:46
【问题描述】:

我正在尝试为 tkinter 中的每个类创建选项卡。但面临一个问题,他们正在互相铺设。

我已经尝试为 Notebook 创建一个新类,但结果是一样的。现在我停在这个变种上。

from tkinter import *
from tkinter import ttk

class Application(ttk.Frame):

    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.master = master
        self.mainframe = ttk.Frame(master, padding='10 10 15 15')
        self.mainframe.grid(column=0, row=0, sticky=N+S+W+E)
        self.connectionCheck()
        self.connectionConf()
        self.measureFrame()
        self.meas()
        self.logview()
        self.running = None
#It have other functions. But I think they not really necessary

class Mapframe(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.master = master
        self.mapframe = ttk.Frame(master, padding='10 10 15 15')
        self.mapframe.grid(column=0, row=0, sticky=N + W + E + S)
        self.choosefiles()
        self.meas()

window = Tk()
notebook = ttk.Notebook(window)
tab1 = Application(notebook)
tab2 = Mapframe(notebook)
notebook.add(tab1, text='Tab1')
notebook.add(tab2, text='Tab2')
notebook.grid(row=0, column=0)
notebook.mainloop()
notebook.quit()

所以,正如我所说的,它们彼此相叠。当程序启动时,选项卡甚至不显示。

更新:将master更改为self.

【问题讨论】:

  • ttk.Frame(master, ... 更改为ttk.Frame(self, ...
  • 我试过了,不行

标签: python oop tkinter tkinter-layout


【解决方案1】:

当创建一个继承自 Frame 的类时,为了容纳其他小部件,一个基本规则是所有子小部件都应该是该类的子级。

在您的情况下,您没有这样做。您正在创建一个笔记本,向笔记本添加框架,但每个框架内的小部件都被设置为根窗口的子级。他们需要是框架的孩子(例如:self)。

您需要定义self.mainframeself.mapframe,如下例所示。注意使用self 而不是master 作为第一个参数:

self.mainframe = ttk.Frame(self, padding='10 10 15 15')
...
self.mapframe = ttk.Frame(self, padding='10 10 15 15')

您应该使用master 作为小部件的父级的唯一位置是在调用ttk.Frame.__init__(self, master) 时。任何时候都不应该将小部件放入master

【讨论】:

  • 我尝试将master 更改为self。现在我看到了标签,但它们靠近两个框架,它们仍然相互重叠。
  • @D53E:在您的问题中添加图片以显示结果。
  • @stovfl 我添加了图片
  • @D53E:同样的错误:您没有遵循答案中描述的“基本规则”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多