【问题标题】:Finding the currently selected tab of Ttk Notebook找到Ttk Notebook当前选中的标签
【发布时间】:2012-12-09 16:07:02
【问题描述】:

我有一个包含 8 个框架的 Ttk Notebook 小部件 - 所以,有 8 个选项卡。每个框架都包含一个文本小部件。我在 Notebook 小部件之外有一个按钮,我想在按下此按钮时将文本插入到当前选项卡的 Text 小部件中。

这似乎需要确定当前选择了笔记本中的哪个小部件,但我似乎找不到如何执行此操作。如何找到当前选择的标签?

或者,我怎样才能实现我想要的?

如果有帮助,这是我笔记本的代码:

self.nb = Notebook(master)
self.nb.pack(fill='both', expand='yes', padx=10, pady=10)
self.frames = []
self.texts = []
for i in xrange(8):
  self.frames.append(Frame())
  self.nb.add(self.frames[i])
  self.texts.append(Text(self.frames[i]))
  self.texts[i].pack(fill='both')

【问题讨论】:

    标签: python tkinter ttk


    【解决方案1】:

    我根本不是专家,但希望我能帮助一些“新鲜的眼睛”。 我想这可能涉及到

    def buttonclick():
          somevariablename = focus_get()
          #Print your text into the somevariable notebook could be
          #something like(not sure about the syntax):
          focusednotebook = somevariablename
          focusednotebook.insert('1.0', 'your text here')
    
    yourbutton = Button(parent, text = "button name", command = buttonclick)
    yourbutton.pack()
    

    希望它有效或让您朝着正确的方向前进。

    请随意编辑,因为我在这里相当新 amd 使用 python :-)

    【讨论】:

    • 啊,是的,这与我最终使用的非常相似。不是我想要的,但它可以满足我的需要。
    【解决方案2】:

    您可以通过select 方法检索选定的选项卡。但是,此方法返回的 tab_id 并没有多大用处。 index将其转换为所选标签的编号。

    >>> nb.select()
    '.4299842480.4300630784'
    >>> nb.index(nb.select())
    2
    

    请注意,您还可以使用 tab 获取有关所选标签的更多信息

    >>> nb.tab(nb.select(), "text")
    'mytab2'
    

    您可以查看笔记本参考文档:http://docs.python.org/3/library/tkinter.ttk.html#notebook

    【讨论】:

    • 啊,正是我想要的!我在筛选文档时遇到了麻烦,所以我一定错过了这个。但是,是的,这是完美的。
    【解决方案3】:

    您可以使用"current" 关键字获取当前选择的标签:

    noteBook.index("current")
    

    查看此网站: https://docs.python.org/2/library/ttk.html#tab-identifiers 24.2.5.3。标签标识符

    【讨论】:

      【解决方案4】:

      有两种简单的方法可以查看选择了哪个选项卡:

      nb.select()  # returns the Tab NAME (string) of the current selection
      

      nb.index('current') # returns the Tab INDEX (number) of the current selection
      

      .select() 方法也可用于通过nb.select(tabId) 选择当前处于活动状态的选项卡。如果没有 arg,它将返回当前选择的 tabId(以“名称”形式)。

      .index(tabId) 将 tabId 转换为数字索引。它还可以采用字符串“end”,它将返回选项卡的数量。所以,nb.index(tkinter.END) 就像一个笔记本小部件的 len() 方法。

      当没有选项卡时,.select() 返回一个空字符串,但.index('current') 抛出异常。所以,如果你想要索引,我会说

      if nb.select():
          idx = nb.index('current')
      

      是最好的方法。

      在您的特定情况下,您可能希望获取当前笔记本选项卡名称,然后通过nametowidget() 方法将该名称转换为实际的子文本小部件以进行操作。所以...

      tabName = notebook.select()
      if tabName:
          textWidget = notebook.nametowidget(tabName) # here, 'notebook' could be any widget
          textWidget.insert(pos, text, tags)
      

      nametowidget(name) 方法将 Tkinter 名称映射到实际的小部件。它是任何实际小部件都可以调用的方法。

      【讨论】:

        【解决方案5】:

        在 tk.Notebook 中轻松获取标签标签您所要做的就是使用 notebook 对象并定位当前标签的索引。这可以按如下方式完成

         # creating a notebook object
         notebook = ttk.Notebook(root, height=height, width=width, padding=20)
        
         # Adding tabs
         notebook.add(bin_tab, text="Binary Conversion")
         notebook.add(oct_tab, text="Octal Conversion")
         notebook.add(hex_tab, text="Hexadecimal Conversion")
        
         print(notebook.index("current")) # returns 0, 1, 2depending on how many tabs you have in my case i have 3 which means index from 0 to 2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-13
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 2014-03-22
          • 1970-01-01
          • 2022-10-06
          • 1970-01-01
          相关资源
          最近更新 更多