20

Tkinter と wxPython の両方で少し遊んだことがありますが、ソース コードがきれいに見えるという点で、Tkinter の方がはるかに気に入っています。ただし、それほど多くの機能はないようです。特に、タブがありません (Firefox ウィンドウの上部にあるタブのように)。

この件について少しグーグルすると、いくつかの提案が得られます。タブを使用できるクラスを含むクックブック エントリがありますが、非常に原始的です。SourceForge にはPython メガウィジェットもありますが、これは非常に古いようで、インストール中にエラーが発生しました。

Tkinter でタブ付き GUI を作成した経験のある人はいますか? 何を使いましたか?それとも、より強力なウィンドウ コンポーネントが必要な人は wxPython を使用しなければならないという単純なケースですか?

4

5 に答える 5

23

最近の Python (> 2.7) バージョンでは、 で導入されたTk をテーマにしたウィジェットセットttkへのアクセスを提供するモジュールを使用できます。Tk 8.5

ttkPython 2 でインポートする方法は次のとおりです。

import ttk

help(ttk.Notebook)

Python 3 では、ttkモジュールは のサブモジュールとして標準ディストリビューションに付属していますtkinter

TkDocsWeb サイトの例に基づいた簡単な作業例を次に示します。

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()

もう 1 つの方法は、ライブラリのNoteBookウィジェットを使用することです。tkinter.tixを使用するには、通常はウィジェットのインストールと一緒にウィジェットをインストールtkinter.tixする必要があります。インストールをテストするには、次のことを試してください。TixTk

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

詳細については、PSF Web サイトのこのWeb ページを参照してください。

tixはかなり古く、十分にサポートされていないことに注意してください。そのため、最良の選択はttk.Notebook.

于 2008-11-12T17:32:26.493 に答える
8

まだ見ている人がいれば、これを tkinter のタブとして機能させています。コードをいじって、思い通りに機能するようにします (たとえば、ボタンを追加して新しいタブを追加できます)。

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()
于 2013-09-20T17:02:01.213 に答える
3

現時点では役に立たないかもしれませんが、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 の最新バージョンには、すぐに使用できるテーマ ウィジェットのサポートが含まれています。_

于 2008-11-13T20:20:33.027 に答える
0

pmwでどんな問題がありましたか? はい、古いですが、純粋な python であるため、動作するはずです。

問題がある場合、Tix は py2exe では動作しないことに注意してください。

于 2008-11-12T22:34:39.160 に答える
0

「それとも、より強力なウィンドウ コンポーネントが必要な人は wxPython を使用しなければならないという単純なケースですか?」
簡単な答え: はい。

長い回答: wxPython コードが「クリーン」と感じるにはある程度の練習が必要かもしれませんが、Tkinter よりも優れており、はるかに強力です。最近はより多くの人が使用しているため、より良いサポートも得られます.

于 2008-11-12T15:58:20.880 に答える