【问题标题】:How can I invoke a function from an imported module inside a class methode?如何从类方法中的导入模块调用函数?
【发布时间】:2013-03-13 14:14:37
【问题描述】:

我正在尝试使用 tkinter 制作一个小型 GUI 程序。我需要使用 Python 的

subprocess.call()

当我尝试在类方法中这样做时,出现以下错误:

    self.return_code = self.subprocess.call("echo Hello World", shell=True)
AttributeError: 'App' object has no attribute 'subprocess'

这是我的程序的一部分:

from tkinter import *
from subprocess import call

class App:
    def __init__(self, mainframe):
        self.mainframe = ttk.Frame(root, padding="10 10 12 12", relief=GROOVE) 
        self.mainframe.grid(column=0, row=1, sticky=(N, W, E, S))

        self.proceedButton = ttk.Button(self.mainframe, text="Proceed", command=self.proceed)
        self.proceedButton.grid(column=0, row=9, sticky=(W))

    def proceed(self):
        self.proceedButton.config(state=DISABLED)
        self.return_code = self.subprocess.call("echo Hello World", shell=True)

proceed 函数中的最后一行抛出错误。

我正在学习 Python。任何指导将不胜感激。

【问题讨论】:

    标签: python-3.x tkinter subprocess class-method


    【解决方案1】:

    尝试subprocess.call 而不是self.subprocess.call

    import subprocess
    self.return_code = subprocess.call("echo Hello World", shell=True)
    

    selfApp 的一个实例。 subprocess 是一个模块。要了解为什么 self.subprocess 是错误的,请阅读 Python 类教程中的“Random Remarks”。然后阅读模块和how to call a module's functions

    【讨论】:

    • 这会引发另一个错误:self.return_code = subprocess.call("echo Hello World", shell=True) NameError: global name 'subprocess' is not defined This Works: self.return_code = call( "echo Hello World", shell=True)
    • 确实,如果你使用from subprocess import call,那么你可以写call(...)而不是subprocess.call(...)。不过,我倾向于always import modules
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多