【问题标题】:Values from class into variable从类到变量的值
【发布时间】:2012-05-07 21:59:29
【问题描述】:

我有 2 个类,一个称为 MineField,一个称为 Options,在选项类中有刻度,我通过该类中的函数 def assign():,MineField 类获取值具有三个参数(w,h,m)。我想从选项类中的比例为这些参数分配值。 (我使用 tkinter)

Class Options:
  def __init__(self, w, h, m)
    ...
    minorinput = Scale.(...)   
    mainloop()
    ...
  def assign():
    self.width = widthinput.get()
    self.height = heightinput.get()
    self.minor = minorinput.get()

def main():
  ins = Options(0,0,0)
  ins.assign()
  w = ins.width
  h = ins.height
  m = ins.minor
  game.MineField(w,h,m)

那么如何将这些值从秤中获取到 game.MineField 中?

【问题讨论】:

  • 你想在雷区类中存储 w、h 和 m?
  • err... 你刚刚做了,通过将它们作为参数传递?
  • 您是否希望能够在游戏进行中更改值,即当 self.width 更改时,Minefield 会收到更改通知?那将是一个发布-订阅模式。
  • 我不需要在游戏中期更改值,是的,我需要将选项类中的宽度、高度和次要存储到 game.Minefield(w,h,m) 并存储以 w 为单位的宽度以 h 为单位的高度,等等。

标签: python class tkinter


【解决方案1】:

您的代码非常不寻常。本质上,你不能做你要求做的事情。至少,不是你试图这样做的方式。

您是否知道,一旦您调用mainloop,该语句之后的其余代码将不会运行,直到您销毁您的窗口?一旦窗口被销毁,您将无法查询小部件的值,因为它们不存在。

【讨论】:

  • 那你有什么建议?如果我撤回选项窗口会发生什么?
  • 我希望小部件“保持”它们的值(至少在我创建 game.MineField-object 之前)。 “退出”是这样的吗?
  • @tivon:按照您构建代码的方式,在 Options 类被销毁之前,您不可能创建 MineField 对象(因为它的构造函数通过调用 mainloop 启动无限循环,仅在窗口被破坏时终止)。一旦 Options 被销毁,这些值将不再可访问。您需要重新设计您的解决方案。
  • 如果我将天平放在 MineField 类中会发生什么?通过在该类中创建一个创建选项窗口的函数。那不行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多