看起来python是局部的
下面是我创建的一个函数,并将其放入名为last_function.py的文件中看起来python是局部的,python,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:
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> 为什么我不能从上一个函数文件中删除tkinter import*中的。。因为不管怎么说,它在文件的顶部,这是正确的。为什么会出现一个错误,说IntVar()未定义
2> 为什么我必须在函数中作为参数传递混合器
?函数不能直接从调用它的文件顶部的import pygame.mixer继承它吗?
我想说的是。也使用了TKINTER组件,但我不将TKINTER作为参数传递。。是的!那为什么会有这个。。。选择性参数赋值
我真的很困惑
1> 为什么我不能离开特金特
从最后一个函数文件导入*。。
因为不管怎么说,上面都有
调用它的文件的名称
对,为什么我会说一个错误
未定义IntVar()
Python“导入”遵循与Python语言其余部分相同的范围规则。通过在第二个文件顶部的“导入”,不会使Tkinter命名空间可用于最后一个_function.py模块。Tkinter也需要进口到那里
2> 为什么我必须通过混音器
函数中的参数?能
函数不能直接从中继承它
导入pygame。混音器。它位于
调用它的文件?我的意思是
说是。有两个TKINTER组件
也在使用中,但我没有通过
TKINTER作为参数。。我知道!!然后
为什么会有这个。。选择性的
参数赋值
按照这种编码方式,您需要传递混合器,因为您正在使用以下命令在第二个文件中修改它:
mixer.init()
如果在上一个_function.py中重新导入mixer,则会得到mixer的另一个实例,而不是以前导入的实例。这没有什么选择性,因为您的两个文件都导入了Tkinter命名空间
您应该尝试重新考虑此代码,以避免必须将Tkinter导入两个模块,以及必须在一个模块中初始化混频器并将其传递给另一个模块。请不要大喊大叫,即使您很困惑。这可能是一个循环导入错误,表明某个地方存在设计缺陷。一般来说,您应该避免从x导入*
,除非您必须使用它。它会把你的名字空间弄得乱七八糟,并且会给内置程序加上阴影(from os import*
shadows the build-inopen()
。例如,内置程序返回一个文件句柄,os.open
返回一个int)。@g.d.d.c-这很有启发性,谢谢。。从现在起我将使用FQN@g、 d.d.c.这不属于答案吗?@truthreality-可能,尽管我还没有回答这个问题,只是做了一个假设。我需要花更多的时间来弄清楚它究竟在哪里/是否是一个循环导入错误。我只知道,当你只能通过从x import*
执行来完成某项工作时,这通常就是问题所在。@Mark-我认为你之前的解释更好(虽然有点复杂),但是。。我得到了它!!谢谢