首页 > 解决方案 > Tkinter mainloop() 中的模式选择

问题描述

我遇到了以下问题:我希望能够在三个 if 语句之一正在运行时选择一种模式,并且何时完成转到所选的那个。例如,如果“模式”正在运行,我在“s”之后选择“p”,如果结束,“p”如果开始。我也希望这些进程不间断地运行谢谢:D

import tkinter as tk
from tkinter import *

answer = ''

root = Tk()
root.geometry('250x150')
root.title('Mode Selection')

v = tk.IntVar()
v.set(0)  # initializing the choice, i.e. Python
b1 = Button()

modes = [
    ('s', 'to start"'),
    ('p', 'to pause'),
    ('a', 'to abort'),
]

tk.Label(root,
         text="""Choose a mode:""",
         justify=tk.CENTER,
         padx=20).pack()

for val, language in enumerate(modes):
    tk.Radiobutton(root,
                   text=language,
                   padx=20,
                   variable=v,
                   value=val,
                   justify=tk.CENTER).pack()

answer = modes[v.get()][0]

if answer == 's':
    print('s')
    # do something...
elif answer == 'p':
    print('p')
    # do something...
elif answer == 'a':
    print('a')
    # do something...

root.mainloop()

标签: python-3.xtkinterpycharm

解决方案


在这里,使用command,我们可以关联一个由单选按钮的选择触发的事件或函数

modes = [
    ('s', 'to start"'),
    ('p', 'to pause'),
    ('a', 'to abort'),
]


def show_mode(z):
    # Do something...
    print(z)


tk.Radiobutton(root,
               text=modes[0],
               padx=20,
               variable=v,
               value=0,
               justify=tk.CENTER,
               command = lambda : show_mode('s')).pack()

tk.Radiobutton(root,
               text=modes[1],
               padx=20,
               variable=v,
               value=1,
               justify=tk.CENTER,
               command = lambda : show_mode('p')).pack()

tk.Radiobutton(root,
               text=modes[2],
               padx=20,
               variable=v,
               value=2,
               justify=tk.CENTER,
               command = lambda : show_mode('a')).pack()

希望这可以帮助 :)


推荐阅读