清除Tkinter中的屏幕

时间:2017-12-09 17:43:29

标签: python tkinter

我已经尝试了关于这个主题的所有其他帖子,但没有一个对我有用......

这是我的代码:

from tkinter import *

window=Tk()
window.geometry('600x400')
window.title('hello world')

def wrong():
    root=Tk()
    text=Text(root)
    text.insert(INSERT,"WRONG!, you stupid idiot!!!!")
    text.pack()
def right():
    root=Tk()
    text=Text(root)
    text.insert(INSERT,"CORRECT, good job!")
    text.pack()
def reset():
    hide_widgets()
class UIProgram():
    def setupUI(self):
        buttonlist=[]
        button= Button(window,text='Sanjam',command=wrong).pack()
        button2=Button(window,text='Sunny the Bunny',command=wrong).pack()
        button3= Button(window, text='Sunjum',command=right).pack()
        button4= Button(window, text='bob',command=wrong).pack()
        button5= Button(window, text='next',command=reset)
        button5.pack()
        self.label=Label(window)
        self.label.pack()
        window.mainloop()
program= UIProgram()
program.setupUI()

我知道pack_forget()并尝试过它,但它一直给我一个错误。此外,是否可以创建命令(如我所拥有的'重置')并在命令中使用该命令以获得清除屏幕按钮。请帮助,我是Tkinter的新手并且对这些事情知之甚少。

由于

1 个答案:

答案 0 :(得分:0)

示例代码

我很难描述相同的错误数百次 - 代码中的一些注释。

import tkinter as tk

# --- classes ---

class UIProgram():

    def __init__(self, master):
        self.master = master # use to add elements directly to main window

        self.buttons = [] # keep buttons to change text

        # frame to group buttons and easily remove all buttons (except `Next`)
        self.frame = tk.Frame(self. master)
        self.frame.pack()

        # group button in frame
        button = tk.Button(self.frame, text='Sanjam', command=self.wrong)
        button.pack()
        self.buttons.append(button)

        button = tk.Button(self.frame, text='Sunny the Bunny', command=self.wrong)
        button.pack()
        self.buttons.append(button)

        button = tk.Button(self.frame, text='Sunjum', command=self.right)
        button.pack()
        self.buttons.append(button)

        button = tk.Button(self.frame, text='bob', command=self.wrong)
        button.pack()
        self.buttons.append(button)

        # button outside frame
        button_next = tk.Button(self.master, text='Next >>', command=self.reset)
        button_next.pack()

        self.label = tk.Label(self.frame)
        self.label.pack()


    def wrong(self):
        # create second window with message and closing button
        win = tk.Toplevel()
        tk.Label(win, text="WRONG!, you stupid idiot!!!!").pack()
        tk.Button(win, text='close', command=win.destroy).pack()

    def right(self):
        # create second window with message and closing button
        win = tk.Toplevel()
        tk.Label(win, text="CORRECT, good job!").pack()
        tk.Button(win, text='close', command=win.destroy).pack()

    def reset(self):
        # remove frame with all buttons
        self.frame.pack_forget()
        tk.Label(self.master, text="frame removed").pack()

        # or only remove text in labels
        #for button in self.buttons:
        #    button['text'] = '-- place for new text --'

# --- main ---

root = tk.Tk()
root.geometry('600x400')
root.title('hello world')

program = UIProgram(root)

root.mainloop()

顺便说一句:如果你var = Widget(...).pack(),那么你将None分配给var,因为pack()/grid()/place()会返回None。你必须分两行

var = Widget(...)
var.pack()

如果您不需要var

,则在一行中
Widget(...).pack()