13

ttk Treeview ウィジェットを使用して、フォルダー/パス選択ダイアログを実装しています。水平スクロールバーがアクティブにならないことを除いて、すべて期待どおりに機能しています。フォルダ パスが水平方向にどれほど広くても、ウィンドウがどれほど狭くても、水平スライダは表示されません。ただし、垂直スクロールは完全に機能しています。

ツリービューで1つの列しか使用しない場合の何らかの制限か、ウィジェットの構成と接続に関する初心者の間違いのいずれかであると考えています。私は後者に賭けます。

フォルダの深さ全体を表示するためにダイアログを広げた例:

全幅

水平スクロールがアクティブになるポイントまでダイアログが狭められます (ただし、アクティブになりません)。

幅を狭めた

これが私のGUIレイアウトコードです:

winDirSel = tk.Toplevel()
winDirSel.title('Select Test Directory...')
tvwDirSel = ttk.Treeview(winDirSel,
                         height=10,padding=3,
                         show='tree')
lblTestDir = tk.Label(winDirSel, relief=tk.SUNKEN,
                      justify=tk.LEFT, anchor=tk.W,
                      textvariable=ctrlTestDir,width=80)
scbHDirSel = ttk.Scrollbar(winDirSel,
                           orient=tk.HORIZONTAL,
                           command=tvwDirSel.xview)
scbVDirSel = ttk.Scrollbar(winDirSel,
                           orient=tk.VERTICAL,
                           command=tvwDirSel.yview)
tvwDirSel.configure(xscrollcommand=scbHDirSel.set,
                    yscrollcommand=scbVDirSel.set)
lblTestDir.grid(row=0,column=0,sticky=tk.EW)
tvwDirSel.grid(row=1,column=0,sticky=tk.NSEW)
scbVDirSel.grid(row=1,column=1,sticky=tk.NS)
scbHDirSel.grid(row=2,column=0,sticky=tk.EW)
winDirSel.rowconfigure(1,weight=1)
winDirSel.columnconfigure(0,weight=1)
4

3 に答える 3

13

minwidthOK、とで遊んだ後stretch、私はそれをうまく扱えるようになったと思います。水平スクロールは、列の内容ではなく、ウィンドウの境界から出る列の端によってトリガーされます。したがって、これらのパラメーターを使用して列を強制的に広くし、スクロールを強制することができます。

ただし問題は、ツリー自体の幅に合わせて列幅を自動調整できなくなることです。(想定される)フォルダの深さに対応するために非常に広くする必要があるか、列の右側の境界でフォルダ名が切り捨てられている状態で生活しています。

要するに、これはウィジェット自体の制限にすぎません。(少なくとも、私のプラットフォームである MS Windows での動作に関しては。)

于 2013-01-18T16:37:09.093 に答える