TkinterとwxPythonの両方で少し遊んだことがあるので、ソースコードの見た目がどれほどきれいかという点でTkinterの方がはるかに好きです。ただし、機能はそれほど多くないようです。特に、タブはありません(Firefoxウィンドウの上部にあるタブのように)。
このテーマについて少しグーグルすると、いくつかの提案があります。 クックブックエントリ タブを使用できるクラスがありますが、これは非常に原始的です。また、SourceForgeには Python megawidgets がありますが、これは非常に古いようで、インストール中にエラーが発生しました。
Tkinterでタブ付きGUIを作成した経験のある人はいますか?何を使いましたか?それとも、より強力なウィンドウコンポーネントが必要な人は、wxPythonを使用する必要があるというだけですか?
最近のPython(> 2.7)バージョンでは、へのアクセスを提供する ttk
モジュールを使用できます。 )Tkをテーマにしたウィジェットセット。これはTk 8.5
で導入されました。
ttk
をPython 2:にインポートする方法は次のとおりです。
import ttk
help(ttk.Notebook)
Python 3、 ttk
モジュールには、 tkinter
のサブモジュールとして標準ディストリビューションが付属しています。 。
TkDocs
Webサイトの例に基づいた簡単な実例を次に示します。
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つの方法は、 tkinter.tix
ライブラリのNoteBook
ウィジェットを使用することです。 tkinter.tix
を使用するには、通常はTix
ウィジェットのインストールと並行して、Tk
ウィジェットをインストールする必要があります。インストールをテストするには、次のことを試してください。
from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')
詳細については、PSF Webサイトでこれ webpage を確認してください。
tix
はかなり古く、十分にサポートされていないため、ttk.Notebook
を選択するのが最善の選択である可能性があることに注意してください。
誰かがまだ探しているなら、私はこれを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()
現時点では役に立たないかもしれませんが、tk8.5には拡張されたウィジェットのセットが付属しています。この拡張セットは、「タイル」と呼ばれる拡張機能を介してtk8.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の最新バージョンには、すぐに使用できるテーマウィジェットのサポートが含まれるようになりました。_
Pmwでどのような問題がありましたか?それは古いです、はい、しかしそれは純粋ですpythonなので、動作するはずです。
それがあなたにとって問題であるならば、Tixはpy2exeで動作しないことに注意してください。
「それとも、より強力なウィンドウコンポーネントが必要な人は、wxPythonを使用する必要があるというだけですか?」
簡単な答え:はい。
長い答え:wxPythonコードが「クリーン」であると感じるにはある程度の練習が必要かもしれませんが、Tkinterよりも優れていてはるかに強力です。最近はより多くの人が利用しているので、より良いサポートも受けられます。