当前位置:  开发笔记 > 编程语言 > 正文

Tkinter中的笔记本小部件

如何解决《Tkinter中的笔记本小部件》经验,为你挑选了2个好方法。

与Tkinter和wxPython一起玩了一下,我觉得Tkinter在源代码的外观方面要好得多.但是,它似乎没有那么多功能; 特别是它没有标签(如Firefox窗口顶部的标签).

关于这个主题的一点点Google搜索提供了一些建议.有一个类的食谱条目允许你使用标签,但它非常原始.在SourceForge上还有Python megawidgets,虽然这看起来很旧并且在安装过程中给了我错误.

有没有人有经验在Tkinter中制作标签式GUI?你用了什么?或者只是需要更强大的窗口组件的人必须使用wxPython?



1> tzot..:

在最近的Python(> 2.7)版本中,您可以使用该ttk模块,该模块提供对已引入的Tk主题窗口小部件集的访问Tk 8.5.

以下是ttk在Python 2中导入的方式:

import ttk

help(ttk.Notebook)

在Python 3中,该ttk模块附带标准发行版作为子模块tkinter.

这是一个基于TkDocs网站示例的简单工作示例:

from tkinter import ttk
import tkinter as tk
from tkinter.scrolledtext import ScrolledText


def demo():
    root = tk.Tk()
    root.title("ttk.Notebook")

    nb = ttk.Notebook(root)

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it
    page1 = ttk.Frame(nb)

    # second page
    page2 = ttk.Frame(nb)
    text = ScrolledText(page2)
    text.pack(expand=1, fill="both")

    nb.add(page1, text='One')
    nb.add(page2, text='Two')

    nb.pack(expand=1, fill="both")

    root.mainloop()

if __name__ == "__main__":
    demo()

另一种方法是使用库中的NoteBook小部件tkinter.tix.要使用tkinter.tix,您必须Tix安装小部件,通常与小部件的安装一起安装Tk.要测试您的安装,请尝试以下操作:

from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')

有关详细信息,请访问PSF网站上的此网页.

请注意,这tix是相当陈旧且不受支持的,因此您最好的选择可能就是去ttk.Notebook.


tix很老了,支持得不是很好.未来最好的解决方案是ttk.Notebook.从tk版本8.5开始,有主题小部件(ttk),其中包括一个笔记本.

2> sPaz..:

如果有人还在寻找,我在tkinter中将其作为Tab工作.使用代码来使其按照您想要的方式运行(例如,您可以添加按钮以添加新选项卡):

from tkinter import *

class Tabs(Frame):

    """Tabs for testgen output"""

    def __init__(self, parent):
        super(Tabs, self).__init__()
        self.parent = parent
        self.columnconfigure(10, weight=1)
        self.rowconfigure(3, weight=1)
        self.curtab = None
        self.tabs = {}
        self.addTab()                
        self.pack(fill=BOTH, expand=1, padx=5, pady=5)

    def addTab(self):
        tabslen = len(self.tabs)
        if tabslen < 10:
            tab = {}
            btn = Button(self, text="Tab "+str(tabslen), command=lambda: self.raiseTab(tabslen))
            btn.grid(row=0, column=tabslen, sticky=W+E)

            textbox = Text(self.parent)
            textbox.grid(row=1, column=0, columnspan=10, rowspan=2, sticky=W+E+N+S, in_=self)

            # Y axis scroll bar
            scrollby = Scrollbar(self, command=textbox.yview)
            scrollby.grid(row=7, column=5, rowspan=2, columnspan=1, sticky=N+S+E)
            textbox['yscrollcommand'] = scrollby.set

            tab['id']=tabslen
            tab['btn']=btn
            tab['txtbx']=textbox
            self.tabs[tabslen] = tab
            self.raiseTab(tabslen)

    def raiseTab(self, tabid):
        print(tabid)
        print("curtab"+str(self.curtab))
        if self.curtab!= None and self.curtab != tabid and len(self.tabs)>1:
                self.tabs[tabid]['txtbx'].lift(self)
                self.tabs[self.curtab]['txtbx'].lower(self)
        self.curtab = tabid


def main():
    root = Tk()
    root.geometry("600x450+300+300")
    t = Tabs(root)
    t.addTab()
    root.mainloop()

if __name__ == '__main__':
    main()


现代版本的tkinter附带了`ttk`包,它有一个原生标签小部件.没有理由再建立自己的了.请参阅http://www.tkdocs.com/tutorial/complex.html#notebook
哦,我应该更多地考虑这个.我需要使用tkinter进行分发,并且不认为tab是其中的一部分.哦,好吧,我自己很有趣,但我想我最终会使用ttk包来获得更好的支持:P.谢谢你的抬头!
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有