首页 > 解决方案 > 有没有办法调用函数“a”,它在可迭代/产生函数“b”上调用 next()

问题描述

如图所示,我有 2 个功能:

def num():
  for number in range(1, 5):
    yield number

def config_btn():
  global rad_btn1, rad_btn2, rad_btn3, rad_btn4
  c = next(num())

  temp_entry.config(text=f'{iterate_questions(2)}'),
  # temp_entry.config(state=DISABLED)

  rad_btn1.config(text=f'{iterate_answer_choices(c, 1).title()}', indicatoron=0),

  rad_btn2.config(text=f'{iterate_answer_choices(c, 2).title()}', indicatoron=0),

  rad_btn3.config(text=f'{iterate_answer_choices(c, 3).title()}', indicatoron=0),

  rad_btn4.config(text=f'{iterate_answer_choices(c, 4).title()}', indicatoron=0)

def num() 是一个在迭代时产生数字 1 到 5 的函数(我希望如此),而 config_btn 使用前一个函数将一个数字分配给“c”。然后将“c”传递给另一个函数。有没有办法可以从这些函数外部调用 config_btn 以将“c”更改为下一个数字并继续执行其余的函数?

我尝试更改 config_btn 以接受一个数字并通过

标签: pythonuser-interfacetkinterttk

解决方案


如果其他全局变量不打扰您,您可以这样做:

def num():
  for number in range(1, 5):
    yield number

c = num()

def config_btn():
  global rad_btn1, rad_btn2, rad_btn3, rad_btn4, c
  next(c)

  temp_entry.config(text=f'{iterate_questions(2)}'),
  # temp_entry.config(state=DISABLED)

  rad_btn1.config(text=f'{iterate_answer_choices(c, 1).title()}', indicatoron=0),

  rad_btn2.config(text=f'{iterate_answer_choices(c, 2).title()}', indicatoron=0),

  rad_btn3.config(text=f'{iterate_answer_choices(c, 3).title()}', indicatoron=0),

  rad_btn4.config(text=f'{iterate_answer_choices(c, 4).title()}', indicatoron=0)

然而,它似乎并不干净。肯定有更好的办法。
然后你必须处理StopIteration第 5 次迭代时抛出的错误,如果它到目前为止。


推荐阅读