こんにちは、明けましておめでとうございます。
ユーザー インターフェイスを構築しようとしていますが、Tix.ScrolledListbox に問題があります。(Python 2.6.5、Tix 8.4.3、Windows XP)
ユーザーが以前に行った選択に応じて、さまざまな数のアイテムを表示するために使用したかったのです。
これは GIS です。ユーザーが ComboBox からレイヤーを選択し、ボタンを押すと、Listbox に属性テーブルから取得したすべてのフィールド名が表示されます。したがって、一部のレイヤーには 5 つのフィールドがあり、他のレイヤーには 30 フィールドがあります。原則として動作します。
ただし、リストボックスの横のスクロールバーは灰色のままで機能しません。
小さなテスト スニペットでは、ボタンを押した後、ランダム (0..100) の数のアイテムがリスト ボックスに表示され、スクロールバーが機能します。
何も思いつきません。誰もこれを前に持っていましたか?
編集: 次のサンプルコードは、arcpy がインポートされたときにスクロールできない scrolledListbox を示しています。
import Tix
import random
import arcpy
class SampleApp(object):
def __init__(self):
self.window = Tix.Tk()
#listbox
self.lbx = Tix.ScrolledListBox(self.window, width = 30)
self.lbx.listbox.insert(Tix.END, " ")
self.lbx.listbox.bind("<<ListboxSelect>>", self.Choose)
#button to generate new list
self.btn = Tix.Button(self.window, text = "new list",
command = self.NewList)
#label shows chosen list item
self.lbl = Tix.Label(self.window, text = " ", bg = "white")
#pack
self.btn.pack(pady = 10)
self.lbx.pack(side="top", fill="both", expand=True, pady = 10)
self.lbl.pack(pady = 10)
self.window.mainloop()
#function to generate new listbox items on button command
def NewList(self):
self.lbx.listbox.delete(0, Tix.END)
r = random.randint(1, 30)
for i in range(r):
self.lbx.listbox.insert(Tix.END, i)
#event to show selected item in label
def Choose(self, event):
widget = event.widget
selection = widget.curselection()
value = widget.get(selection[0])
self.lbl.config(text = value)
sa = SampleApp()