如何在Tkinter框架内创建弹窗?解决参数错误问题
修复
open_popup() takes 0 positional arguments but 1 was given错误 错误原因
类的实例方法必须接收self作为第一个参数,tkinter在触发复选按钮的command回调时,会自动传递一个参数(即使你不需要用到它),而你的open_popup方法没有定义这个参数,导致参数不匹配报错。
修复方案
给open_popup方法添加self参数,确保它符合类实例方法的定义规范,同时通过self访问类的实例属性:
import pandas as pd import numpy as np from standard_precip import spi import tkinter as tk from tkinter import ttk from tkinter import filedialog from tkinter.messagebox import showinfo import os from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) from tkinter import * from PIL import Image, ImageTk class EGEDT(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.create_widgets() # dimensions of the main window master.geometry("300x300") def create_widgets(self): self.top_frame = ttk.Frame(self) padding_x = 8 padding_y = 7 self.working_dir = "/" # Create a check button self.ab_frame = ttk.Frame(self.top_frame) self.ab_label = ttk.Label(self.ab_frame, text="Select the check button:") self.ab_label.grid(row=1, column=0, padx= 5, pady= 5) self.a = ttk.Checkbutton(self.ab_frame,text="SPI", onvalue=1, offvalue=0,command=self.open_popup) self.a.grid(row=2, column=1, padx= 0, pady= 0) self.ab_frame.grid(row=2, column=0, sticky=tk.W, padx=padding_x, pady=padding_y) self.top_frame.grid(row=0, column=0) # 修复:添加self参数 def open_popup(self): top= Toplevel(self.top_frame) top.geometry("750x250") top.title("Child Window") Label(top, text= "Hello World!", font=('Mistral 18 bold')).place(x=150,y=80) def main(): root = tk.Tk() root.title("Main window") app = EGEDT(master=root) app.mainloop() main()
关键修改点
- 在
def open_popup():后添加self参数,变为def open_popup(self): - 方法内部通过
self.top_frame访问实例的框架属性,确保能正确关联父窗口
内容的提问来源于stack exchange,提问作者hamid mohebzadeh
相关产品推荐
相关产品推荐

