首页 > 解决方案 > 需要帮助了解如何在 tkinter python 中初始化类

问题描述

我正在创建一个可以使用 binance API 进行货币交易的程序。它按预期工作(不包括不相关的代码)我的问题是我现在想要在新的弹出窗口中创建类 Trade 的多个实例。在创建 Trade 类的新实例方面,我无法理解如何实现这一点。此外,我很确定我对 self: self = Trade(top) 的使用没有任何意义(即使它有效)。

总结一下:我希望能够单击一个按钮来启动一个新的 Trade() 实例,这样我就可以在程序的同一个实例中同时将类中的方法用于两个不同的交易例程. 如何?

我将不胜感激任何形式的帮助,包括建议我阅读某些内容。如果我太菜鸟,我很抱歉。

提前谢谢。

class Trade(Frame):
    stop_trading = False
    amount_orders = 0
    after_id = 0

    def __init__(self, master=None):
        Frame.__init__(self, master)

    def change_orders(self):
        if list_variable4.get() == 'TRUE':
            if self.check_open_order() == False or self.amount_orders<2:
                if self.delete_open_orders() == True and self.stop_trading != True:
                    self.create_orders()
    ...

def cron():
    self.amount_orders += 1
    if self.amount_orders > int(trade_cap_box.get(0.0, tk.END)):
        message_window.insert(tk.END,'\nTrade Cycle Cap reached with {} trades'.format(self.amount_orders - 1))
        cap_stop_trading()
    if self.stop_trading != True:
        message_window.insert(tk.END,'\nTrading Cycle Started{}'.format(self.amount_orders))
        interval = int(rate_of_check_box.get(0.0, tk.END))
        print('Trading!')
        self.change_orders()
        self.after_id = top.after(interval*1000*60, cron)

def start_trading():
    self.amount_orders = 0
    self.stop_trading = False
    cron()

top = Tk()
top.geometry("600x500")
top.title('Trade Cron Job')
self = Trade(top)

message_window = Text(top, height=5, width=65)
message_window.place(x = 40,y = 10)

trading_symbol_box = Text(top, height=1, width=20)
trading_symbol_box.place(x = 200,y = 130)
default_trading_symbol = (self.config_data['configs']['symbol'])
if default_trading_symbol:
    trading_symbol_box.insert(END, default_trading_symbol)
else:
    trading_symbol_box.insert(END, "")
trading_symbol_labels = Label(top,  text='Trading Symbol')
trading_symbol_labels.place(x = 40,y = 130)

start_value_box = Text(top, height=1, width=20)
start_value_box.place(x = 200,y = 160)
start_value_box.insert(END, 0)
start_value_labels = Label(top,  text='Start Value To Progress From')
start_value_labels.place(x = 40,y = 160)
and so on...

top.mainloop()

标签: pythonclasstkinter

解决方案


您需要创建 的实例Toplevel,然后将 的实例添加Trade到该窗口。

def new_window():
    window = Toplevel()
    trade_frame = Trade(window)
    trade_frame.pack(fill="both", expand=True)
...
new_window_button = Button(top, text="New Window", command=new_window)

推荐阅读