私は '開始'、 '終了'の値を取得し、スピンボックスウィジェットを作成する必要がある関数を持っています。値は16進数または1の増分で整数になります。Python、tkinterスピンボックスウィジェットの16進値を反復する方法
整数を取得すると(ex:start = 1、finish = 6)、大きな効果があります。 しかし、私は進値を取得する場合(例:スタート= 0x0の、仕上げ= 0xFのを)私は次のエラーを取得する:
_tkinter.TclError: bad spinbox format specifier "%.2x"
それが進値に反復させるために適切なフォーマットは何ですか? Iが基準nmt.edu Spinbox
コードとして、このリンクを使用する:
def __init__(self,parent):
self.master = parent
self.variable_dict = dict()
self.loop_value_frame = LabelFrame(self.master, text="Loop Variables: ", bg='white')
self.loop_value_frame.grid(row=3, column=0, padx=5, sticky='we')
def add_loop_variable(self, min_value, max_value):
self.variable_dict["min_value"] = min_value
self.variable_dict["max_value"] = max_value
self.variable_dict["current_value"] = StringVar()
self.variable_dict["current_value"].set(min_value)
def clear(self):
for widget in self.loop_value_frame.winfo_children():
widget.destroy()
self.loop_value_frame.grid_forget() # remove from view
def create_spinbox(self):
self.clear() # clear the frame
if re.match(r'^\s*(0[xX][0-9a-fA-F]+)\s*', variable_dict["min_value"]): # hex index
int_base = 16
else: # int index
int_base = 10
index_list = [index if int_base==10 else hex(index) for index in range(int(self.variable_dict["min_value"],int_base),int(self.variable_dict["max_value"],int_base)+1)] # parse the index list
Spinbox(self.loop_value_frame, values=tuple(index_list), width=5,
textvariable = self.variable_dict["current_value"],
command = lambda: self.update_loop_index())
def update_loop_index(self):
# do some calculation on the new index to display
self.create_spinbox() # display the whole widget again
:私も
コードに/代わりのFrom_の '値' でスピンボックスを使用してこの問題を解決しようと
def create_spinbox(self,min_value,max_value):
self.current_value = StringVar()
self.current_value.set(min_value)
if re.match(r'^\s*(0[xX][0-9a-fA-F]+)\s*', min_value): # hex index
Spinbox(self.master,
from_=min_value, to=max_value, width=5,
format='%.2x',
textvariable=self.corrent_value,
command=lambda: self.update_loop_index())
else: # int index
Spinbox(self.master, from_=min_value, to=max_value, width=2,
textvariable = self.current_value,
command = lambda: self.update_loop_index())
このコードではエラーは発生しません。しかし、それはStringVar()で動作しません。スピンボックスの上/下を押すとスピンボックスの表示は更新されませんが、current_value
に保存されている値を読み取ると新しい値が表示されます。 私は何が間違っていますか?
したがって、スピンボックスは値が変更されるたびに新しいスピンボックスを作成しますか?どうしてそうするか?なぜ、この潜在的に無数のスピンボックスがすべて同じ変数を使用しているのでしょうか? –
ユーザがインデックスを変更するたびにウィジェットウィンドウが消去され(スピンボックスを含むすべてのtkウィジェットが消去されます)、更新された値で新しいウィジェットが作成されます。 StrignVarはプロパティであり、消去されていないので、現在のデータを保持するはずですが、デフォルト値に戻ります。 – NopkaNastia
あなたが示したコードはそれをしません。 [mcve]を入力してください。しかし、私はそれを正確に再現するためにウィジェットを破壊するという点は見ません。開始値と終了値を変更する必要がある場合は、値を破棄して再作成する必要はありません。 –