2017-01-02 85 views
-1

python相当新。 我使用选项菜单和我重视他们的标签:如何添加另一个时删除1标签 - python tkinter

from tkinter import * 
root=Tk() 

def f(s): 
    if s=="btn": 
     one=Label(root,text="one blah blah") 
     one.grid(column=1,row=2) 
    if s=="btn2": 
     two=Label(root,text="two") 
     two.grid(column=1,row=2) 


v=StringVar(root) 
v.set("f") 
a=OptionMenu(root,v,"btn","btn2",command=f) 
a.grid(column=1,row=1) 

root.configure() 
root.geometry("100x100") 
root.mainloop() 

我无法弄清楚如何使“一个等等等等”删除“两节”,以便它是不可见的,当按btn1后按btn2。我曾尝试.grid_forget和类似的东西,但我永远不能得到它的工作。

如果重要的话,这是一个较大程序的示例程序,我创建的地方有很多不同的选项菜单和标签。

+1

不管你尝试可能给你一个错误信息。该错误消息告诉你到底是什么问题。告诉我们你已经尝试了什么,以及错误是什么。 –

+1

开始创建空标签,然后您可以更改此标签中的文本 - 您不必删除标签。 – furas

回答

1

你可以在开始创建空的标签,后来只更改文本在这个标签

import tkinter as tk 

# --- functions --- 

def f(s): 
    if s == "btn": 
     l['text'] = "one blah blah" 
    elif s == "btn2": 
     l['text'] = "two" 
    else: 
     print('ERROR: unknow:', s) 

# --- main --- 

root = tk.Tk() 
root.geometry("100x100") 

v = tk.StringVar(value="f") 

a = tk.OptionMenu(root, v, "btn", "btn2", command=f) 
a.grid(column=1, row=1) 

l = tk.Label(root) 
l.grid(column=1, row=2) 

root.mainloop() 

如果有删除Label(因为你必须把不同的部件 - 即Button),然后使用destroy()

import tkinter as tk 

# --- functions --- 

def f(s): 
    global w # inform function to use external variable when you will use `=` 

    if s == "label": 
     if w: # check if widget already exist 
      w.destroy() 

     w = tk.Label(root, text="Hello World!") 
     w.grid(column=1, row=2) 

    elif s == "button": 
     if w: # check if widget already exist 
      w.destroy() 

     w = tk.Button(root, text="Click Me") 
     w.grid(column=1, row=2) 

    else: 
     print('ERROR: unknow:', s) 

# --- main --- 

root = tk.Tk() 
root.geometry("100x100") 

v = tk.StringVar(value="f") 

a = tk.OptionMenu(root, v, "label", "button", command=f) 
a.grid(column=1, row=1) 

w = None # create global variable without value 
     # to use later with widget (and keep access to this widget) 

root.mainloop() 

BTW:您可以创建小部件只有一次,更换他们 - 然后用grid_forget()隐藏控件

import tkinter as tk 

# --- functions --- 

def f(s): 
    global w # inform function to use external variable when you will use `=` 

    if s == "label": 
     if w: # check if widget already exist 
      w.grid_forget() 

     w = l 
     w.grid(column=1, row=2) 

    elif s == "button": 
     if w: # check if widget already exist 
      w.grid_forget() 

     w = b 
     w.grid(column=1, row=2) 

    else: 
     print('ERROR: unknow:', s) 

# --- main --- 

root = tk.Tk() 
root.geometry("100x100") 

v = tk.StringVar(value="f") 

a = tk.OptionMenu(root, v, "label", "button", command=f) 
a.grid(column=1, row=1) 

# create but not display 
l = tk.Label(root, text="Hello World!") 
b = tk.Button(root, text="Click Me") 

w = None # create global variable without value 
     # to use later with widget (and keep access to this widget) 

root.mainloop() 

功能可短,如果你检查所有可能的值s

def f(s): 
    global w # inform function to use external variable when you will use `=` 
    if w: # check if widget already exist 
     w.grid_forget() 

    if s == "label": 
     w = l 
    elif s == "button": 
     w = b 

    w.grid(column=1, row=2)