我的 tkinter ttk.spinbox 无限增加或减少

问题描述

我正在尝试通过 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 (将#修改为@)