You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:24:56