以下是我创建的函数,并将其放在名为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文件中删除from tkinter import*
..因为无论如何它都是在正确调用它的文件的顶部。为什么我会收到一个错误,说IntVar()没有定义。
2 - ;为什么我必须在函数中传递mixer
作为参数?该函数是否可以直接从调用它的文件顶部的import pygame.mixer
继承它?
我的意思是说。有TKINTER组件也被使用,但我不认为TKINTER作为参数..我!那为什么会有这个...选择性参数赋值??
我真的很困惑!
答案 0 :(得分:2)
1>为什么我不能从tkinter中删除 从last_function文件导入* .. 因为无论如何它都在顶部 调用它的文件 对。为什么我会说错误 IntVar()未定义
Python“import”遵循与其他Python语言相同的作用域规则。通过第二个文件顶部的“import”不会使last_function.py模块可以使用Tkinter命名空间。 Tkinter也需要在那里进口。
2>为什么我必须通过调音台作为 函数中的参数?可以的 函数不直接从中继承 导入pygame.mixerthat是最重要的 调用它的文件?我的意思是什么 说是的。还有TKINTER组件 也被使用,但我不通过 TKINTER作为参数..我做!!然后 为什么会这样..有选择性 参数赋值??
使用此编码的方式,您需要通过混音器,因为您在第二个文件中修改它:
mixer.init()
如果你在last_function.py中重新导入了混音器,你将获得另一个混音器实例,而不是之前导入的混音器实例。由于您的两个文件都已导入Tkinter名称空间,因此没有任何选择性。
您应该尝试重新考虑此代码,以避免将Tkinter导入两个模块,并在一个模块中将init混合并传递给另一个模块。