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

Python跨类调用函数遇Attribute not found错误求助

Python类方法调用报错解决

我正在学习Python,以下是我的代码。我想要在PresentationFunctions类中调用Rearange_files类里的move_slide_up()函数,并传入Listbox_name作为参数,但出现了attribute not found错误,恳请提供帮助。

class Rearange_files():
  def move_slide_up(list_box_name):
        name  = list_box_name 

        index =  name  .curselection()
        if not index:
            return
        for idx in index:
            if idx > 0:
                title = name  .get(idx)
                name  .delete(idx)
                name  .insert(idx-1, title)
                name  .selection_set(idx-1)
                    
        ###Move file names down in list box


class PresentationFunctions:

        list_box_filename =tk.Listbox(slide_order_window, selectmode = "multiple",height=15,width 
        list_box_filename.pack( padx=20,pady=5)

        """Need to call   function move_slide_up(): here

问题解决步骤

1. 修复Rearange_files的方法定义

Python类里的方法必须符合语法规则:

  • 若不想实例化类就调用方法,给move_slide_up加上@staticmethod装饰器,标记为静态方法;
  • 若打算先创建类的实例再调用,把方法第一个参数改成self(代表类的实例对象)。

2. 修复PresentationFunctions的语法问题

  • list_box_filename的定义不完整,width后面必须填写数值,还要补全右括号;
  • 类中的代码不能直接写在类顶层,需要放进方法里(比如__init__初始化方法),否则会在类加载时直接执行,容易触发未定义变量等错误。

3. 正确调用move_slide_up的两种方式

方式一:静态方法调用

import tkinter as tk

class Rearange_files():
    @staticmethod
    def move_slide_up(list_box_name):
        name = list_box_name 

        index = name.curselection()
        if not index:
            return
        for idx in index:
            if idx > 0:
                title = name.get(idx)
                name.delete(idx)
                name.insert(idx-1, title)
                name.selection_set(idx-1)

class PresentationFunctions:
    def __init__(self, slide_order_window):
        # 补全width参数,示例设为50,可自行调整
        self.list_box_filename = tk.Listbox(slide_order_window, selectmode="multiple", height=15, width=50)
        self.list_box_filename.pack(padx=20, pady=5)
        
        # 直接通过类名调用静态方法,传入listbox实例
        Rearange_files.move_slide_up(self.list_box_filename)

# 测试代码
root = tk.Tk()
pf = PresentationFunctions(root)
root.mainloop()

方式二:实例化类后调用实例方法

import tkinter as tk

class Rearange_files():
    def move_slide_up(self, list_box_name):
        name = list_box_name 

        index = name.curselection()
        if not index:
            return
        for idx in index:
            if idx > 0:
                title = name.get(idx)
                name.delete(idx)
                name.insert(idx-1, title)
                name.selection_set(idx-1)

class PresentationFunctions:
    def __init__(self, slide_order_window):
        self.list_box_filename = tk.Listbox(slide_order_window, selectmode="multiple", height=15, width=50)
        self.list_box_filename.pack(padx=20, pady=5)
        
        # 先创建Rearange_files的实例,再调用方法
        rearranger = Rearange_files()
        rearranger.move_slide_up(self.list_box_filename)

# 测试代码
root = tk.Tk()
pf = PresentationFunctions(root)
root.mainloop()

额外注意点

  • 必须导入tkinter模块,否则tk.Listbox会触发未定义错误;
  • slide_order_window必须是有效的Tkinter窗口对象,比如示例中的root;
  • 原代码中list_box_filename的定义不完整,一定要补全width的数值和右括号,否则连基础语法检查都无法通过。

内容的提问来源于stack exchange,提问作者Abhijith V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:15:04