我现在正在做一个大项目,以帮助我学习我的第一个编程语言(Python),并且我遇到了一些未知的领域。我知道使用全局变量通常很糟糕并且有更好的解决方案,但我无法根据我的情况来解决这个问题。
我已经将下面的代码作为我想要实现的一个简单示例。什么是最好的方法而不是使用全局变量?
此外,我在下面的代码中是否有任何一般性错误?
提前致谢
from tkinter import *
root = Tk()
display_number = 5
class NumberBox():
def __init__(self):
global display_number
self.number_label = Label(root, text=display_number)
self.number_label.pack()
self.engine()
def engine(self):
self.number_label.config(text=display_number)
root.after(10, self.engine)
def change_number(operation):
global display_number
if operation == "add":
display_number += 1
if operation == "subtract":
display_number -= 1
Button(root, text="Add Class", command=lambda: NumberBox()).pack()
Button(root, text="Number UP", command=lambda: change_number("add")).pack()
Button(root, text="Number DOWN", command=lambda: change_number("subtract")).pack()
for _ in range(5):
NumberBox()
root.mainloop()
答案 0 :(得分:1)
from tkinter import *
root = Tk()
class NumberBox():
display_number = 5
def __init__(self):
self.number_label = Label(root, text=self.display_number)
self.number_label.pack()
self.engine()
def engine(self):
self.number_label.config(text=self.display_number)
root.after(10, self.engine)
def change_number(operation):
if operation == "add":
NumberBox.display_number += 1
if operation == "subtract":
NumberBox.display_number -= 1
Button(root, text="Add Class", command=lambda: NumberBox()).pack()
Button(root, text="Number UP", command=lambda: change_number("add")).pack()
Button(root, text="Number DOWN", command=lambda: change_number("subtract")).pack()
for _ in range(5):
NumberBox()
root.mainloop()
通过在类中定义变量(但在__init__
之外,它被所有类的实例作为单个变量拥有,因此将其更改为一个会影响所有实例
答案 1 :(得分:0)
我做了一些改变:
from zope import schema
from zope.schema.vocabulary import SimpleVocabulary
emailVocab = SimpleVocabulary.fromItems((
('sysn', u'System notifications (strongly recommended)'),
('mark', u'Marketing emails'),
('offe', u'Special offers')))
...
email_optin = schema.List(
title = u'',
description = u'',
required = False,
value_type = schema.Choice(source=emailVocab))
方法:此方法不应在用户操作后立即用于更新root.after
:import tkinter as tk
是不好的做法结果:
import *