好像python是局部的

问题描述

| 以下是我创建的函数,并将其放在名为last_function.py的文件
from tkinter import*


def new_gui(app,sound_file,mixer):

    track=mixer.sound(sound_file)
    def track_toggle():
        if ballCheckbutton.get()==1:

            track.play(loops=-1)
        else:
            track.stop()

    ballCheckbutton=Intvar()    
    c1=Checkbutton(app,text=\"check me out\",command=track_toggle,variable=ballCheckbutton)
    c1.pack(side=LEFT)

    ballScale=DoubleVar()

    def ScaleVolume(v):
        track.set_volume(ballScale.get())

    ballScale.set(track.get_volume())
    s1=Scale(app,variable=ballScale,resolution=0.1,command=ScaleVolume,orient=HORIZONTAL,from_=0.0,to=1.0,label=\"volume\")
    s1.pack()
这是我使用的文件..调用代码并运行它。
from tkinter import *
import pygame.mixer
from last_function import*

app=Tk()
mixer=pygame.mixer
mixer.init()
new_gui(app,\"49119_M_RED_HardBouncer.wav\",mixer)


def close():
    mixer.stop()
    app.destroy()

app.protocol(\"WM_DELETE_WINDOW\",close)
app.mainloop()
一切正常..但我的查询是... 1>为什么我不能从last_function文件删除ѭ2。。为什么会收到错误消息,提示未定义Intvar()。 2>为什么我必须在函数中传递
mixer
作为参数?函数不能直接从调用它的文件顶部的ѭ4继承它吗?  我的意思是说。还有TKINTER组件,但我不通过TKINTER作为参数。那么为什么会有这个...选择性参数分配呢? 我真的很困惑!!!     

解决方法

           1>为什么我不能从Tkinter中删除   从last_function文件导入*。   因为无论如何,它在最前面   调用它的文件   对。为什么我会说错误   IntVar()未定义 Python的“导入”遵循与其他Python语言相同的作用域规则。通过第二个文件顶部的\“ import \”,不会使Tkinter名称空间可用于last_function.py模块。 Tkinter也需要在那里导入。   2>为什么我必须通过搅拌机   函数中的参数?可以   函数不能直接从其继承   导入pygame.mixer   该文件调用吗?我的意思   说是。有TKINTER组件   也被使用,但是我不通过   TKINTER作为参数..我!然后   为什么有这个..选择性的   参数分配? 使用这种编码方式,您需要传递混合器,因为您正在使用以下命令在第二个文件中对其进行修改:
mixer.init()
如果您在last_function.py中重新导入了Mixer,则将获得另一个Mixer实例,而不是先前导入的实例。由于这两个文件都导入了Tkinter名称空间,因此对此没有任何选择。 您应该尝试重新构造此代码,以避免必须将Tkinter导入两个模块,而不必在一个模块中初始化Mixer并将其传递给另一个模块。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...