Python 如何在tkinter上创建后退按钮或删除画布上的所有小部件?
我正在开发一个西班牙语应用程序。我想知道如何有效地创建后退按钮或删除画布上的所有内容,包括小部件。我看到一些帖子创建了一个类,并使用self。等等,但我对这些东西都不熟悉。我是一个初学者。在第一页中,您将使用以下工具在画布上放置小部件:Python 如何在tkinter上创建后退按钮或删除画布上的所有小部件?,python,button,canvas,tkinter,widget,Python,Button,Canvas,Tkinter,Widget,我正在开发一个西班牙语应用程序。我想知道如何有效地创建后退按钮或删除画布上的所有内容,包括小部件。我看到一些帖子创建了一个类,并使用self。等等,但我对这些东西都不熟悉。我是一个初学者。在第一页中,您将使用以下工具在画布上放置小部件: from Tkinter import * import Tkinter as ttk from ttk import * master = Tk() master.title("Learn Spanish") canvas = Canvas(ma
from Tkinter import *
import Tkinter as ttk
from ttk import *
master = Tk()
master.title("Learn Spanish")
canvas = Canvas(master, width = 600, height = 600, bg = 'orange')
canvas.grid(row=0, column=0, rowspan=2, columnspan=2)
title = canvas.create_text(300, 100, text = 'Learn To Speak Spanish', font = ('Freestyle Script', 60), fill = 'firebrick')
text = canvas.create_text(300, 250, text = 'Welcome! What are you ready \n to learn Spanish today?', font = ('Freestyle Script', 35), fill = 'firebrick')
def nextScreen():
canvas.delete("all")
canvas.create_text(300, 125, text = 'Select one of the activities below to get started.', font = ('Freestyle Script', 30), fill = 'firebrick')
btn4 = ttk.Button(master, bg='white', command=wordStudy, text='Word Study', font=('Freestyle Script', 35))
canvas.create_window(300, 300, width=300, height=90, window=btn4)
btn5 = ttk.Button(master, bg='white', command=matchGame, text='Matching Game', font=('Freestyle Script', 35))
canvas.create_window(300, 400, width=300, height=90, window=btn5)
btn6 = ttk.Button(master, bg='white', command=quiz, text='Quiz Yourself', font=('Freestyle Script', 35))
canvas.create_window(300, 500, width=300, height=90, window=btn6)
def quiz():
canvas.delete("all") # haven't worked on this one yet
def matchGame():
canvas.delete("all") # haven't worked on this one yet either
def wordStudy(): #i'm right here
canvas.delete("all")
Canvas(master, width = 600, height = 600, bg = 'orange')
canvas.create_text(300, 50, text = 'Study the terms below.', font = ('Freestyle Script', 30), fill = 'firebrick')
btn = ttk.Button(master, bg='white', command=back, text='Back', font=('Freestyle Script', 15))
canvas.create_window(100, 575, width=40, height=20, window=btn)
def textvariable(text): # translation of english pop up when buttons pressed
entry.delete(0,END)
entry.insert(0,text)
return
b1=Button(canvas, text="Good morning.", command=lambda:textvariable("Buenos dias.")).grid(row=1, column=1, pady=(100,50), padx=100)
b2=Button(canvas, text="Good night.", command=lambda:textvariable("Buenas noches.")).grid(row=1, column=2, pady=(100,50), padx=100)
b3=Button(canvas, text="Goodbye.", command=lambda:textvariable("Adiós.")).grid(row=2, column=1, pady=50, padx=100)
b4=Button(canvas, text="Hello.", command=lambda:textvariable("Hola.")).grid(row=2, column=2, pady=50, padx=100)
b5=Button(canvas, text="What is your name?", command=lambda:textvariable("¿Cómo te llamas?")).grid(row=3, column=1, pady=50, padx=100)
b6=Button(canvas, text="How are you?", command=lambda:textvariable("¿Cómo estás?")).grid(row=3, column=2, pady=50, padx=100)
b7=Button(canvas, text="Please.", command=lambda:textvariable("Por favor.")).grid(row=4, column=1, pady=50, padx=100)
b8=Button(canvas, text="Thank you.", command=lambda:textvariable("Gracias.")).grid(row=4, column=2, pady=50, padx=100)
entry = Entry(canvas, textvariable=textvariable, width=30)
entry.grid(column=2, row=8, padx=10, pady=(10, 50))
canvas.create_text(295, 570, text = 'Translation:', font = ('Freestyle Script', 25), fill = 'firebrick')
btnStart = ttk.Button(master, bg='white', command=nextScreen, text='Start', font=('Freestyle Script', 35))
canvas.create_window(295, 400, width=400, height=90, window=btnStart)
def back(): # i'm not sure how to make back button or make this work!
canvas.delete("all")
mainloop()
在wordStudy中,您正在使用网格:
canvas.create_window(..., window=btn)
要删除与网格一起放置的小部件,请使用以下任一方法:
b1=Button(canvas, text=... )).grid(row=1,...
我记不起确切的区别,所以你得用谷歌搜索一下
评论回复
在函数nextScreen()中从画布中删除所有窗口时,
它之所以有效,是因为画布是在主脚本中定义的。按规则
命名作用域函数将使用main中的变量(如果不是
在函数内部定义。因为画布是可变的,所以您可以更改它
没有宣布它是全球性的
按钮b1-b8在函数wordStudy()中创建
引用(名称:b1、b2等)在
函数退出。要将它们宣布为全球工作,它们必须
在主脚本外创建函数;全球
语句将主脚本中的变量包含到
功能范围
我建议您使用相同的方法将小部件放到
整个脚本中的函数nextScreen()
中的画布
很好用。如果您愿意,代码也更易于阅读和维护
始终以相同的方式解决相同的任务
如果您想尝试使用grid\u-forget()
,下面是一些示例
要玩的代码。当你这样做的时候,一定要注意
范围
ttk
是tkinter
中的另一组功能。要使用它们(尽管您的代码中没有),请使用:from tkinter import ttk
。注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,闲聊的材料和缩写的txtspk,恳求,你被困多久了,投票建议,元评论等。只需解释你的问题,并展示你已经尝试了什么,你期望什么,以及实际发生的情况。非常感谢您的回复!我真的很感激!但是,我添加了您建议的代码,它没有删除按钮。相反,我得到一个错误,说“全局名称b1未定义”。我甚至把“全局b1”放在你建议的代码之前。我对答案添加了一些进一步的解释。我能够删除所有小部件!非常感谢你的帮助!!!!!!!如果你认为我的回答对你有帮助,请友善地接受
b1.grid_remove()
b1.grid_forget()
from tkinter import *
root = Tk()
root.geometry('200x100')
field = Canvas(root, bg='white')
field.pack(expand='yes', fill='both')
def start_function(event=None):
print('Start button pressed.')
start_button = Button(field, text='start', command=start_function)
start_button.grid(row=0, column=0) # Place the button on the canvas
def remove_button(event=None): # Forget the button
start_button.grid_forget()
def show_button(event=None): # Remember the button
start_button.grid()
root.bind('a', remove_button) # Press "a" on the keyboard to forget
root.bind('s', show_button) # Press "s" on the keyboard to remember