问题描述
|
以下是我创建的函数,并将其放在名为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并将其传递给另一个模块。