0

私はグローバルをあまり扱ったことがなく、クラス内の関数と変数をグローバルにする方法を知りたいと思っていました。フォントと関数を使用してクラス間のグローバルをテストしようとしていました。誰かが私が間違っているところを指摘できれば、それは非常に役に立ちます。

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()
4

2 に答える 2

1

私はグローバルをあまり使ったことがなく、クラス内の関数と変数をグローバルにする方法を知りたいと思っていました。

できません。メソッド内では、変数をグローバルとして宣言でき、その変数への代入はグローバル変数になります。

他のレベルのグローバル性はありません。

もちろん、クラスのポイントはグローバルな状態を回避し、共有状態をカプセル化したままにすることであるため、これを行うことは望ましくありません。

于 2012-08-19T23:54:32.007 に答える
1

このコードでは

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

Global() は作成されたばかりで、割り当てられていません。グローバルの__init__呼び出し

global f,f1,f2,enter,leave

しかし、これは「グローバル変数」ではなくスコープを定義します。

1つのオプションは、次のことを行うことです

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)
于 2012-08-19T23:54:51.383 に答える