不想使用全局。Python

2024-04-23 23:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用一个变量,我在一个函数中定义了另一个函数,但我不想使用全局变量。你知道吗

import sys
from tkinter import *
from tkinter import messagebox
from tkinter import colorchooser
from tkinter import filedialog

x = "#000000"
#colour chooser
def mColour():
    color = colorchooser.askcolor()
    mlabel2 = Label(mGui,text=color).pack()
    messagebox.showinfo(title = "Colour",message = "This feature has not been fully added yet.")
    x = color[1]
    print (color[1])
    return x
#printing message
def mhello():
    mtext = ment.get()
    mlabel2 = Label(mGui,text=mtext, fg = (b)) # color varible = x
    mlabel2.pack()
#message
def mNew():
    messagebox.showerror(title = "(New) Error",message = "This feature has not been added yet.")
def mAbout():
    messagebox.showinfo(title = "About",message = "This Jono's susure personal data base. (Will be)")
#question message
def mQuit():
    mExit = messagebox.askokcancel(title = "Quit",message = "Are you sure")
    if mExit > 0:
        mGui.destroy()
#open
def mOpen():
    myopen = filedialog.askopenfile()
    mlabel3 = Label(mGui,text=myopen).pack()
    messagebox.showinfo(title = "Open",message = "This feature has not been fully added yet.")


mGui = Tk()
ment = StringVar()

mGui.geometry("300x200+100+100")
mGui.title("Jono's Clock")

mlable = Label(mGui,text="My Label",fg = "red").pack()
mbutton = Button(mGui,text ="OK",command = mhello,fg = "red").pack()

mEntry = Entry(mGui,textvariable=ment).pack()



# Menu

menubar = Menu(mGui)

filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label = "New",command = mNew)
filemenu.add_command(label = "Open",command = mOpen)
filemenu.add_command(label = "Colour",command = mColour)
filemenu.add_command(label = "About",command = mAbout)
filemenu.add_command(label = "Quit",command = mQuit)


menubar.add_cascade(label = "File",menu = filemenu)
mGui.config(menu = menubar)



mGui.mainloop()

我正在Windows7上使用Python3.3。你知道吗

我已经按要求添加了其余的代码。你知道吗


Tags: textfromimportaddmessagetitledeflabel
3条回答
#colour chooser
def mColour(x):
    color = colorchooser.askcolor()
    mlabel2 = Label(mGui,text=color).pack()
    messagebox.showinfo(title = "Colour",message = "This feature has not been fully added yet.")
    x = color[1]
    print (color[1]) # Just a test
    return x

x = "#000000" # default text colour
mColour(x)

如注释所示,最好将变量x作为参数传递给函数。你知道吗

def mColour(x):
    ...

def mHello(x):
    ...

然后,当您要调用函数时:

x = "#000000" 

x = mColour(x)
mhello(x)

根据经验,在函数中定义全局变量是个坏主意(很少有例外)。您希望保持本地和全局名称空间分开。函数允许为此传递参数。你知道吗

你可以用一个类来代替,因为我认为没有办法从另一个函数中访问局部变量。你知道吗

class Example(object):
    x="00006"

def c():
 print(Example.x)

c()

所以这里你根本不用全局变量

相关问题 更多 >