【问题标题】:How do you insert a tab in a specific place in a tkinter ttk notebook?如何在 tkinter ttk 笔记本的特定位置插入选项卡?
【发布时间】:2022-01-11 05:52:20
【问题描述】:

我想知道如何在特定位置设置 tkinter 笔记本选项卡。例如,我有一个允许您克隆其他选项卡的选项卡,但我希望它保留在最后。我尝试的代码似乎不起作用,因为它会生成一个 tkinter.TclError :“Slave index (whatever number) out of bounds”。

`

from tkinter import *\
from tkinter import ttk, messagebox as msg\
from widgets.translate import Translator\
from widgets.explore import FileExplorer\

root = Tk()\
root.title('Widgets')

tabs = ttk.Notebook(root, width=900, height=350)
tabs.pack(fill='both', expand=1, pady=(5, 0))

tr = ttk.Frame(tabs)
tr_frame = ttk.Frame(tr)
tr_frame.pack(fill=Y)
tabs.add(tr, text='Translator')
    
Translator(tr_frame)

explorers=0
translators=0

def fileexplore_tab(index=2):
    global explorers

    fl_explore = ttk.Frame(tabs)
    tabs.insert(index, fl_explore, text='File Explorer')
    FileExplorer(fl_explore)
    explorers += 1

fileexplore_tab(2)
fileexplore_tab(len(tabs.tabs())-1)

print(len(tabs.tabs()))

root.mainloop()

`

【问题讨论】:

  • 如果您的示例不使用 widgets 模块,这将有所帮助。似乎没有必要重现该问题。此外,您的代码在前几行的末尾有一些奇怪的反斜杠。
  • 小部件模块适用于适合笔记本框架的更复杂的应用程序。此外,您可以忽略反斜杠
  • 对,但是widgets模块完全没有必要说明这个问题,实际上是阻碍了它。许多人可能不愿意安装这些软件包只是为了运行您的代码。

标签: python tkinter ttk ttkwidgets


【解决方案1】:

如何在 tkinter ttk notebook 的特定位置插入标签?

insert 方法允许您指定一个整数 id。例如,以下代码创建四个选项卡,然后在中间插入第五个。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)

for color in ("red", "orange", "green", "blue"):
    frame = tk.Frame(notebook, background=color)
    notebook.add(frame, text=color)

extra_frame = tk.Frame(notebook, background="white")
notebook.insert(2, extra_frame, text="white")

root.mainloop()

insert 的第一个参数是一个数字索引。选项卡从零开始编号,因此位置0 将插入选项卡作为第一个选项卡。您可以使用字符串"end" 在末尾插入制表符。

last_frame = tk.Frame(notebook, background="black")
notebook.insert("end", last_frame, text="black")

索引不能大于标签的数量。

除了数字之外,您还可以指定特定选项卡。例如,给定上面的last_frame 示例,可以使用last_frame 而不是整数位置在其前面插入一个制表符。

new_frame = tk.Frame(notebook, background='bisque')
notebook.insert(last_frame, new_frame, text="bisque")

【讨论】:

  • 感谢您的解决方案!
猜你喜欢
  • 2018-04-05
  • 2023-04-09
  • 2022-06-27
  • 1970-01-01
  • 2021-04-27
  • 2019-10-07
  • 1970-01-01
  • 2018-08-19
  • 2020-05-27
相关资源
最近更新 更多