问题描述
我正在尝试通过 ttk.spinBox 显示带有 pandas 和 figureCanvasTkAgg 的图形。
我的代码看起来像无限增加或减少事件。 所以如果我点击事件按钮,spinBox 的值会增加(或 decr)直到它的范围结束。
但有时它会如我所愿,即使我没有触及任何相关内容
这是什么问题? 有什么想法可以暂时限制获取事件吗? 我试图给一个术语来获得下一个事件,但它只是等待一个术语并且无限地工作..
from tkinter import *
import tkinter.ttk as ttk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import figureCanvasTkAgg
class Data:
def __init__(self,data):
self.__data = data
@property
def data(self):
return self.__data
@data.setter
def data(self,data):
self.__data = data
root = Tk()
frame_spinBox = Frame(root)
frame_spinBox.pack()
frame_fig = Frame(root)
frame_fig.pack()
spinBox = ttk.SpinBox(frame_spinBox,from_=-10,to=10,validate='key')
spinBox.pack()
data_index = Data(1)
spinBox.set(data_index.data)
figure = plt.figure(figsize=(5,4),dpi=100)
ax = figure.add_subplot(111)
line = figureCanvasTkAgg(figure,frame_fig)
line.get_tk_widget().pack(side="left",fill="both")
data = {1 : {"a1" : 11,"b1" : 12,"c1" : 13},2 : {"a2" : 21,"b2" : 22,"c2" : 23},3 : {"a3" : 31,"b3" : 32,"c3" : 33}}
def sb_Incr(event,data_index):
print("sb_Incr")
data_index.data += 1
return
def sb_Decr(event,data_index):
print("sb_Decr")
data_index.data -= 1
return
def cmd_Update(ax,figure,data,data_index,sb):
print("cmd_Update")
print("data_index :",data_index.data)
sb.set(data_index.data)
try:
selected_data = data[data_index.data]
except:
print("key Error Occured")
return
df = pd.DataFrame(selected_data,index=[0]).T
print(df)
if df.empty:
print("Empy_DataFrame------")
return
ax.clear()
ax.bar(x=df.index,height=df[0],width=.5,label=df[0])
figure.canvas.draw()
figure.canvas.flush_events()
return
cmd_Update(ax,spinBox)
spinBox.bind("<<Increment>>",lambda x,y=data_index : sb_Incr(x,y))
spinBox.bind("<<Decrement>>",y=data_index : sb_Decr(x,y))
spinBox.config(command=lambda w=ax,x=figure,y=data,z=data_index : cmd_Update(w,x,y,z,spinBox))
root.mainloop()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)