AttributeError: у объекта 'Event' нет атрибута 'combobox' Исключение в обратном вызове Tkinter Как исправить? - PullRequest
0 голосов
/ 19 апреля 2020
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')
import tkinter
import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
import tkinter.ttk as ttk
from tkinter import *
from tkinter.ttk import Combobox
from alpha_vantage.timeseries import TimeSeries
from alpha_vantage.techindicators import TechIndicators
import sys
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.backend_bases import key_press_handler

global_symbol = None

def config_plot():
    fig, ax = plt.subplots()
    return(fig, ax)

class Win1:
    def global_symbol(self,event = None):
        global global_symbol
        global_symbol = self.combobox.get()
    def __init__(self, master):
        self.master = master
        self.master.geometry("400x400")
        self.frame = tk.Frame(self.master)
        symbol = ['ROG.SW','SMI','NYSE','DAX','Stockxx']
        symbol.sort()
        self.combobox = StringVar()
        self.combobox = ttk.Combobox(master, values = symbol)
        self.combobox.bind("<<ComboboxSelected>>", global_symbol)#onSymbolSelected)
        self.combobox.place(x=100, y=50)
        button1 = Button(root, text="Click Here", fg = 'blue', width=20, command = lambda: self.new_window("2", Win2))
        button1.pack(side='bottom',padx=15,pady=15)
        self.quit = tk.Button(self.frame, text = f"Close this window", command = self.close_window)
        self.quit.pack()
        self.frame.pack()
    def close_window(self):
        self.master.destroy()
    def butnew(self, text, number, _class):
        tk.Button(self.frame, text = text, command= lambda: self.new_window(number, _class)).pack(side='left')  
    def new_window(self, number, _class):
        self.new = tk.Toplevel(self.master)
        _class(self.new, number)

class Win2:
    def __init__(self, master, number):
        self.master = master
        self.master.geometry("1080x540")
        self.frame = tk.Frame(self.master)
        self.frame = Frame(self.master)
        self.fig, self.ax = config_plot()
        self.graphIndex = 0
        self.canvas = FigureCanvasTkAgg(self.fig, self.master)
        self.config_window()
        self.quit = tk.Button(self.frame, text = f"Close this window", command = self.close_window)
        self.quit.pack(side=LEFT)
        self.draw_graph_one()
        self.butnew("Weitere Funktionen", "3", Win3)
        self.frame.pack(expand=YES, fill=BOTH)        
    def butnew(self, text, number, _class):
        tk.Button(self.frame, text = text, command= lambda: self.new_window(number, _class)).pack(side='left')
    def new_window(self, number, _class):
        self.new = tk.Toplevel(self.master)
        _class(self.new, number) 
    def draw_graph_one(self):
        ts = TimeSeries(key='YOUR_API_KEY',output_format='pandas')
        data1, meta_data1 = ts.get_monthly(symbol=global_symbol)
        df1 = data1['4. close']
        self.ax.clear()
        self.ax.plot(df1)
        self.ax.set(title='Historical Chart')
        self.canvas.draw()
    def on_key_press(event):
        print("you pressed {}".format(event.key))
        key_press_handler(event, self.canvas, toolbar)
    def config_window(self):
        self.canvas.mpl_connect("key_press_event", self.on_key_press)
        toolbar = NavigationToolbar2Tk(self.canvas, self.master)
        toolbar.update()
        self.canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
        self.button_switch1 = Button(self.master, text="Historical Chart", command=self.draw_graph_one)
        self.button_switch1.pack(side=LEFT)    
    def close_window(self):
        self.master.destroy() 
root = tk.Tk()
app = Win1(root)
root.mainloop()

Ошибка:

global_symbol = self.combobox.get() # this assume combo is a property of Win1
AttributeError: 'Event' object has no attribute 'combobox'
Exception in Tkinter callback

Это ошибка, которую я получаю каждый раз при запуске программы. global_symbol никогда не изменяется и остается None, но он должен измениться на один из элементов символа списка, который можно выбрать из выпадающего списка. Кто-нибудь знает как это исправить? Я видел много подобных вопросов, но я не мог выяснить проблему. Я уже пытался заменить строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...