Python 2.6 とそれに含まれる標準の Tkinter を使用して、インターフェイスのレイアウトを再設計しています。問題は、私がいくつかの奇妙な動作に気付いていることです。私は Tkinter を初めて使用するため、経験不足のために見落としている単純なものかもしれません。
目的のレイアウトを取得するために、マスター フレーム内にフレームをネストする方法のサンプル コードを次に示します。
import Tkinter as tk
root = tk.Tk()
master = tk.Frame(root)
frame = tk.Frame(master).grid(sticky = tk.W)
item1 = "Label One"
L1 = tk.Label(frame, text = item1).grid(sticky = tk.W)
b1 = tk.Button(frame, text = "Button 1").grid(sticky = tk.W)
find = tk.Label(frame, text = "Find").grid(sticky = tk.W)
item = tk.Entry(frame, width = 50).grid(sticky = tk.W)
##item.insert(0,"Enter Item to Search For")
L2 = tk.Label(frame, text = "Label Two").grid(sticky = tk.W)
search = tk.Button(frame, text = "Search").grid(row = 3, column = 0)
frame2 = tk.Frame(master).grid(sticky = tk.W)
list1 = tk.Listbox(frame2, width = 100).grid(sticky = tk.W)
##yscroll = tk.Scrollbar(frame2,orient = tk.VERTICAL,command = list1.yview).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
yscroll = tk.Scrollbar(frame2, orient = tk.VERTICAL).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
##list1.configure(yscrollcommand = yscroll.set)
##xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL, command = list1.xview).grid(sticky = tk.W + tk.E)
xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL).grid(sticky = tk.W + tk.E)
##list1.configure(xscrollcommand = xscroll.set)
root.mainloop()
次のエラーは、エントリ ウィジェットにデフォルト値を挿入しようとしたときに発生し、フレームのネストを開始する前に機能しました。
Traceback (most recent call last):
File "H:\Tkinter\Grid.py", line 17, in <module>
item.insert(0,"Enter Item to Search For")
AttributeError: 'NoneType' object has no attribute 'insert'
サンプルコードのコメントアウトされたすべての行で同様のエラーが発生します。これらは、スクロール時にリストを変更するように指示できないため、現在スクロールバーが機能しないため、実行する必要があるアクションです。
1.このようにフレームをネストする場合、別の方法でウィジェットの変数にアクセスする必要がありますか?
2.ネストされたフレームを使用していて、子と親の両方がグリッドを使用している場合、ウィジェットの配置がマスターの行数と列数だけに対応するのはなぜですか? Y 軸スクロール バーの行を見ると、マスターの行 = 5、列 = 1 にする必要がありました。ウィジェットには親がframe2として設定されており、frame2にもグリッドを使用したかったので、frame2の行0、列1である必要があると思いますが、マスターフレームグリッドを使用しているようです。
3.グリッド線を別のフレームに表示することはできますか?