【问题标题】:Python 3 Tkinter notebook tabid. How to return the text of all tabs instead of the number ids?Python 3 Tkinter notebook tabid。如何返回所有选项卡的文本而不是数字 ID?
【发布时间】:2016-08-03 18:54:01
【问题描述】:

大家好,我一直在学习 Tkinter 并制作了一些 GUI 应用程序。我正在尝试使用笔记本小部件,但我被困在一个地方。我想知道是否有一种方法可以对所有当前选项卡使用 for 循环并返回所有选项卡的文本名称而不是数字 id。我想用它来跟踪帧。我四处搜索并找到了如何显示当前选项卡的选项卡文本,但我需要所有选项卡。我还没有找到任何专门针对它的东西。让我知道你是否有想法。谢谢。

[编辑] 代码 sn-p

from tkinter import *
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from tkinter import ttk


class Window(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.master = master
        self.init_window()
        self.second_window()
        self.pm_tabs = []

    def init_window(self):# Builds the UI for the main window

        self.n = ttk.Notebook(root)

        self.get_tabs_button = Button(self.textboxframe,
                                      width=20,
                                      text='Get Tab Names',
                                      command=lambda:self.get_tab_names())
        self.get_tabs_button.grid(row = 0,
                                  column= 1,
                                  padx=(5,5),
                                  pady=(5,150),
                                  sticky=N+S+E+W)

        self.n.add(self.textboxframe, text='Chat')
        self.n.grid(row=0, column=0, sticky=N+S+E+W)

    def second_window(self):# UI for second window

        self.get_tabs_button = Button(self.textboxframe,
                                      width=20,
                                      text='Get Tab Names',
                                      command=lambda:self.get_tab_names())
        self.get_tabs_button.grid(row = 0,
                                  column= 1,
                                  padx=(5,5),
                                  pady=(5,150),
                                  sticky=N+S+E+W)
        self.n.add(self.textboxframe, text='Second')

    def get_tab_names(self): # get the names of the tabs. Hoping to get the text names of the tab.
        for tabs in self.n.tabs():
            print(tabs)

if __name__ == '__main__':
    root = Tk()
    app = Window(root)
    root.mainloop()

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。如果您向我们提供您已经尝试过的示例,或者提供有关您发现的确切内容的信息,则可以改进此问题。
  • 这里的代码有点长。基本上我正在制作一个使用标签来发送私人消息的小聊天客户端。当一条私人消息到来时,我会查找发送它的人的姓名,并生成一个带有 2 个文本框的选项卡,一个用于输入,一个用于显示发送和接收的消息。我想做的是,当有消息进来时,查看用户名并让它通过一个 for 循环,如果有一个标签的文本是该名称的标签,则在那里发布传入的文本。我不知道这是否有意义。我可以尝试制作一些示例代码。
  • 我添加了一个小代码sn-p。我希望这会有所帮助。
  • 编辑不够好。请创建一个最小且完整的示例来说明这个问题——人们可以实际运行的东西。

标签: python python-3.x tkinter


【解决方案1】:

根据官方文档,notebook的tab方法可以用来返回一个标签的信息,比如标签上的文字。

因此,您可以获得所有选项卡的文本列表,如下所示:

notebook = ttk.Notebook(...)
...
tab_names = [notebook.tab(i, option="text") for i in notebook.tabs()]

如果您是列表推导的新手,上述内容与此相同:

tab_names = []
for i in notebook.tabs():
    tab_names.append(notebook.tab(i, "text"))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2021-08-26
相关资源
最近更新 更多