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

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

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

有帮助吗?

解决方案

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

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

import ttk

help(ttk.Notebook)

在Python 3中, <代码> ttk 模块附带标准发行版作为的子模块<代码> Tkinter的

以下是基于 TkDocs <的示例的简单工作示例/ a>网站:

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

其他提示

如果还有人在看,我在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()

虽然目前它可能没有帮助,但是tk 8.5附带了一组扩展的小部件。通过称为“瓦片”的扩展,该扩展集可以通过tk 8.4获得。扩展的小部件集包括一个笔记本小部件。不幸的是,此时Tkinter默认使用相当旧版本的Tk,这些版本不附带这些小部件。

已经努力为Tkinter提供瓷砖。查看 http://tkinter.unpythonic.net/wiki/TileWrapper 。有关其他类似工作,请参阅 http://pypi.python.org/pypi/pyttk 。此外,为了了解这些小部件的外观(在Ruby,Perl和Tcl中),请参阅 http://www.tkdocs。 COM /

Tk 8.5是对股票Tk的巨大改进。它介绍了几个新的小部件,本机小部件和主题引擎。希望很快它将在Tkinter中提供。太糟糕了,Python世界落后于其他语言。

更新:最新版本的Python现在支持开箱即用的主题小部件。 _

“或者只是需要更强大的窗口组件的人必须使用wxPython吗?”

简答:是的。

答案很长: 您的wxPython代码可能需要一些练习才能感觉到“干净”。但它比Tkinter更好,更强大。你也会获得更好的支持,因为现在有更多人使用它。

你对pmw有什么问题?这是旧的,是的,但它是纯Python,所以它应该工作。

请注意,如果这对您来说是个问题,则Tix不能与py2exe一起使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top