微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我的 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 举报,一经查实,本站将立刻删除。