【发布时间】:2011-09-14 20:39:21
【问题描述】:
下面是我创建的一个函数,放在一个叫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 作为参数传递.. 是吗!那为什么会有这个……选择性的参数赋值??
我真的很困惑!!!
【问题讨论】:
-
请不要大喊大叫,即使你很困惑。
-
这很可能是循环导入错误,表明某处存在设计缺陷。一般来说,您应该避免使用
from x import *,除非您绝对必须使用它。它会混淆你的命名空间并且可以隐藏内置插件(例如from os import *隐藏内置open()。内置返回文件句柄,os.open返回一个 int)。 -
@g.d.d.c- 这很有启发性,谢谢.. 从现在开始我将使用 FQN!
-
@g.d.d.c 不属于答案吗?
-
@truthreality - 可能,虽然我没有回答这个问题,但只是做了一个假设。我需要花更多时间来弄清楚它在哪里/是否实际上是一个循环导入错误。我只知道,当您只能通过
from x import *使某事工作时,这通常是问题所在。
标签: python