【问题标题】:Radiobutton only shows one option单选按钮仅显示一个选项
【发布时间】:2016-09-28 12:08:11
【问题描述】:

我不确定我做错了什么,但似乎我的单选按钮只显示一个选项而不是两个选项(这是我最初想要的)。

PLAYERS = [("Black", "black"),
           ("White", "white")]

def first_player(self) -> str:

    self.firstplayer = tkinter.StringVar(value = 'black')

    self._player_text = tkinter.StringVar()

    self._player_text.set('Which player moves first: ')

    player_label = tkinter.Label(
            master = self.root_window, textvariable = self._player_text,
            background = 'yellow', height = 1, width = 20, font = DEFAULT_FONT)

    player_label.grid(row=1, column = 0, padx = 10, pady=90, sticky = tkinter.W+tkinter.N)

    for text,mode in PLAYERS:
        first = tkinter.Radiobutton(self.root_window, text = text,
                            variable = self.firstplayer , value = mode)

        first.grid(row = 1, column = 0, padx = 300, pady = 90, sticky = tkinter.W + tkinter.N)

    return self.firstplayer.get()

【问题讨论】:

  • -> str 是非法语法。你期望它做什么?此外,tkinter 没有名为 Root 的类;你希望tkinter.Root() 做什么?

标签: python user-interface tkinter radio-button


【解决方案1】:

您将两个单选按钮放在同一个位置:第 1 行,第 0 列。因此第一个不可见,因为它位于第二个下方。如果您希望标签和两个单选按钮位于同一行但不同的列上,解决方案是将它们全部赋予同一行和不同的列。

有很多方法可以做到这一点,我会告诉你一个:

column = 1
for text,mode in PLAYERS:
    first = tkinter.Radiobutton(self.root_window, text = text,
                                variable = self.firstplayer , value = mode)
    first.grid(row = 1, column = column, sticky = tkinter.W + tkinter.N)
    column += 1

【讨论】:

  • 即使我将数字切换为第 2 列第 1 行,它仍然只显示白色。
  • 我删除了行并将列留在那里并将 padx, pady 更改为 0 但它现在只停留在底部而不是我想要的位置。
  • padx 和 pady 与问题无关。每个单选按钮需要不同的行和/或列。
  • 我删除了行,现在它只有列,现在它是我想要的方式,但不是在我想要的地方。它位于底部而不是标签旁边。我该如何解决?
  • @accelerate:我不知道你是怎么做到的,但你似乎让这变得比需要的更困难。我已更新我的答案以显示一种可能的解决方案。
猜你喜欢
  • 2021-07-03
  • 2022-01-16
  • 2012-07-30
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多