2012-08-19 4 views
0

Я не много сделал с глобальным, и мне было интересно, как я могу сделать функции и переменные внутри класса глобальным. Я пытался протестировать глобальные классы, используя шрифты и функции. Если кто-нибудь может указать, где я ошибаюсь, это было бы очень полезно.Python Глобальные переменные между классами

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() 
+0

Что вы хотите сказать? Вы только что отправили код, не сказав, что вы хотите. Дайте конкретный пример того, чего вы пытаетесь достичь. – BrenBarn

ответ

1

В этом коде

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

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) 
+0

Вы в основном просто говорите OP, чтобы не использовать 'global'? – Marcin

+0

@Marcin - нет, я комментирую, что странно иметь класс «Globals», который также использует ключевое слово globals, как и вы, и продемонстрировать, что он может использовать переменные уровня класса внутри класса, если он хочет организовать их там. Если есть причина, чтобы определить константные глобальные переменные из класса (например, при инициализации), я не знаю этого. – dfb

1

Я не сделал много с глобальным и мне было интересно, как я могу сделать функции и переменные внутри класса Глобальный.

Вы не можете. Внутри метода вы можете объявить переменную как глобальную, а присвоения ей - глобальной переменной.

Существует не какой-либо другой уровень глобализации.

Конечно, вы не хотели бы этого делать, потому что точка классов - это избегать глобального состояния и поддерживать общее состояние инкапсуляции.

Смежные вопросы