类之间的Python全局变量

时间:2012-08-19 23:49:06

标签: python class global-variables global

我在全局方面做得不多,我想知道如何在类全局中创建函数和变量。我试图使用字体和函数测试类之间的全局。如果有人能指出我哪里出错了,那将非常有帮助。

Global.py

#Fonts
#Common Functions
import tkFont

class Global():
    def __init__(self):
        global f,f1,f2,enter,leave
        f = tkFont.Font(name='f',size=14, weight='bold')
        f1 = tkFont.Font(name='f1',size=12, weight='bold')
        f2 = tkFont.Font(name='f2', underline=True,size=12, weight='bold')

    def enter(self,event):
            event.widget.config(font='f2')
    def leave(self,event):
            event.widget.config(font='f1')

LoginFrame.py

from Tkinter import *
from Global import *

class LoginFrame(Frame):
    def __init__(self,master):
        self.master=master
        Global()

    def createWidgets(self):
        self.frame = Frame(self.master,bg='black',width=800,height=500,bd=5,relief=GROOVE)
        self.user_lbl = Label(self.frame, text='User', bg='black', fg='white',font='f1')
        self.user_lbl.bind('<Enter>',enter), self.user_lbl.bind('<Leave>',leave)

        self.pw_lbl = Label(self.frame, text='Password', bg='black', fg='white',font='f2')
        self.pw_lbl.bind('<Enter>',enter), self.pw_lbl.bind('<Leave>',leave)

    def packWidgets(self):
        self.frame.grid_propagate(0), self.frame.grid(row=1)
        self.user_lbl.grid(row=2,column=1,sticky=W)
        self.pw_lbl.grid(row=4,column=1,sticky=W)


root=Tk()
loginFrame=LoginFrame(root)
loginFrame.createWidgets()
loginFrame.packWidgets()
root.mainloop()

2 个答案:

答案 0 :(得分:1)

  

我在全球范围内做得不多,我想知道如何才能做到这一点   全局类中的函数和变量。

你做不到。在方法内部,您可以将变量声明为全局变量,对它的赋值将是全局变量。

没有任何其他级别的全球性。

当然,您不希望这样做,因为类的要点是避免全局状态,并保持封装的共享状态。

答案 1 :(得分:1)

在此代码中

def __init__(self,master):
    self.master=master
    Global()

Global()刚刚创建而未分配。全球__init__来电

global f,f1,f2,enter,leave

但是这定义了范围,而不是'全局变量'。

一种选择是执行以下操作

class Globals():
    f = tkFont.Font(name='f',size=14, weight='bold')
    f1 = tkFont.Font(name='f1',size=12, weight='bold')
    f2 = tkFont.Font(name='f2', underline=True,size=12, weight='bold')

或者只是自己定义

 f = tkFont.Font(name='f',size=14, weight='bold')
 f1 = tkFont.Font(name='f1',size=12, weight='bold')
 f2 = tkFont.Font(name='f2', underline=True,size=12, weight='bold')

然后在函数中使用全局变量。除非您正在进行作业,否则不需要关键字global

self.pw_lbl = Label(...,f)