Python 为什么我的代码中的按钮一直按下?
我真的知道为什么mi按钮一直按下,qestion更像是:我怎样才能避免它?源代码如下,谢谢:Python 为什么我的代码中的按钮一直按下?,python,tkinter,Python,Tkinter,我真的知道为什么mi按钮一直按下,qestion更像是:我怎样才能避免它?源代码如下,谢谢: import tkinter as tk from tkinter import filedialog as fd # creacion de cada venta # ---ventana 1--- class Window1(tk.Frame): final_path = "" def __init__(self, parent): # inicio y c
import tkinter as tk
from tkinter import filedialog as fd
# creacion de cada venta
# ---ventana 1---
class Window1(tk.Frame):
final_path = ""
def __init__(self, parent):
# inicio y creacion del propio frame
tk.Frame.__init__(self, parent)
self.config(bg="#33ccff", width='990', height='250')
# primera etiqueta con valores
self.label1 = tk.Label(
self, text="Documento Seleccionado", bg="#33ccff")
# segunda etiqueta con texto variable
self.txt_carga = tk.StringVar()
self.txt_carga.set("Archivo no seleccionado")
self.label2 = tk.Label(self, textvariab=self.txt_carga, bg="#33ccff")
# primer boton de carga de documentos y funcion del boton
self.load_button = tk.Button(self, text="Cargar Documento")
# segundo boton de siguiente
self.next_button = tk.Button(self, text="Siguiente")
# Definicion de funciones (Con binding hay que añadir el evento al boton)
def function_load(event):
path = fd.askopenfile(filetype=(("Excel", ".xlsx"), ("CSV", ".csv"), ("Todos los Archivos", "*.*")))
self.final_path = str(path.name)
self.txt_carga.set(path.name)
def function_next(event):
print(self.final_path)
# binding: de esta manera se llama a las funciones de los botones al final de forma
# que queda mas ordenado, (x,y) -> x = tipo de evento, y = funcion donde se define
self.load_button.bind('<ButtonPress-1>', function_load)
self.next_button.bind('<Button-1>', function_next)
# instanciacion de los objetos en la ventana
self.label1.grid(row=0, column=0, columnspan=2, padx=200, pady=25)
self.label2.grid(row=1, column=0, columnspan=2, pady=25)
self.load_button.grid(row=2, column=0, pady=20)
self.next_button.grid(row=2, column=1, pady=20)
# ---ventana inicio------
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
self.parent = parent
# necesario para que este se inicie como objeto de la clase Frame
tk.Frame.__init__(self, parent, *args, **kwargs)
# INSANCIAS
self.window1 = Window1(self) # instancia de la clase
self.window1.pack() # empaquetado de la clase
self.pack() # empaquetado propio
# creo el main del programa
if __name__ == "__main__":
root = tk.Tk()
MainWindow(root)
root.mainloop()
将tkinter作为tk导入
从tkinter导入文件对话框作为fd
#卡达文塔酒店
#---文塔纳1---
类Window1(tk.Frame):
final_path=“”
定义初始化(自身,父级):
#inicio y creacion del propio框架
tk.Frame.\uuuu init\uuuuu(自,父)
self.config(bg=“#33ccff”,宽=990',高=250”)
#普莱米拉·埃蒂克塔·康瓦洛雷斯
self.label1=tk.Label(
self,text=“Documento Seleccionado”,bg=“#33ccff”)
#segunda etiqueta con texto变量
self.txt_carga=tk.StringVar()
self.txt_carga.set(“Archivo no selectionado”)
self.label2=tk.Label(self,textvariab=self.txt_carga,bg=“#33ccff”)
#文档和功能的入门级boton de carga de documentos y Function del boton
self.load_button=tk.button(self,text=“Cargar Documento”)
#塞贡多波顿酒店
self.next_button=tk.button(self,text=“Siguiente”)
#功能定义(关于波顿事件)
def功能_加载(事件):
path=fd.askopenfile(文件类型=(“Excel”、“.xlsx”)、(“CSV”、“.CSV”)、(“Todos los Archivos”、“*”))
self.final_path=str(path.name)
self.txt_carga.set(path.name)
def功能_下一步(事件):
打印(自身最终路径)
#绑定:最终形式的绑定功能
#这是一个规则,(x,y)->x=tipo de evento,y=function donde se define
自加载按钮绑定(“”,函数加载)
self.next\u按钮.bind(“”,函数\u next)
#文塔纳项目实例
self.label1.grid(行=0,列=0,列span=2,padx=200,pady=25)
self.label2.grid(行=1,列=0,列span=2,pady=25)
self.load_按钮网格(行=2,列=0,pady=20)
self.next_按钮网格(行=2,列=1,pady=20)
#---文塔纳·伊尼西奥------
类主窗口(tk.Frame):
定义初始化(自、父、*args、**kwargs):
self.parent=parent
#有必要对clase框架的目标进行详细说明
tk.Frame.\uuuuu init\uuuuuu(self,parent,*args,**kwargs)
#英萨西亚
self.window1=window1(self)#clase实例
self.window1.pack()
self.pack()#empaquetado propio
#creo el main del programa酒店
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
主窗口(根)
root.mainloop()
正如您所看到的,我的程序有一个窗口,我在其中放置了两个标签和两个按钮。这个问题是由加载按钮的函数(def function\u load)引起的,因为文件对话框会打开,但我认为进程会继续运行,这会导致按钮保持按下状态。如果您想在按下按钮小部件时执行某些操作,则无需为按钮小部件绑定事件,只需为其设置一个命令。您的代码中存在拼写错误。您的最终代码:
import tkinter as tk
from tkinter import filedialog as fd
# creacion de cada venta
# ---ventana 1---
class Window1(tk.Frame):
final_path = ""
def __init__(self, parent):
# inicio y creacion del propio frame
tk.Frame.__init__(self, parent)
self.config(bg="#33ccff", width='990', height='250')
# primera etiqueta con valores
self.label1 = tk.Label(
self, text="Documento Seleccionado", bg="#33ccff")
# segunda etiqueta con texto variable
self.txt_carga = tk.StringVar()
self.txt_carga.set("Archivo no seleccionado")
self.label2 = tk.Label(self, textvariable=self.txt_carga, bg="#33ccff") # spelling error.
# primer boton de carga de documentos y funcion del boton
self.load_button = tk.Button(self, text="Cargar Documento",command=self.function_load) # add command
# segundo boton de siguiente
self.next_button = tk.Button(self, text="Siguiente",command=self.function_next) # add command
# Definicion de funciones (Con binding hay que añadir el evento al boton)
# binding: de esta manera se llama a las funciones de los botones al final de forma
# que queda mas ordenado, (x,y) -> x = tipo de evento, y = funcion donde se define
# instanciacion de los objetos en la ventana
self.label1.grid(row=0, column=0, columnspan=2, padx=200, pady=25)
self.label2.grid(row=1, column=0, columnspan=2, pady=25)
self.load_button.grid(row=2, column=0, pady=20)
self.next_button.grid(row=2, column=1, pady=20)
def function_load(self): # it can be a self.function
path = fd.askopenfilename(filetype=(("Excel", ".xlsx"), ("CSV", ".csv"), ("Todos los Archivos", "*.*")))
self.txt_carga.set(path)
def function_next(self):
print(self.final_path)
# ---ventana inicio------
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
self.parent = parent
# necesario para que este se inicie como objeto de la clase Frame
tk.Frame.__init__(self, parent, *args, **kwargs)
# INSANCIAS
self.window1 = Window1(self) # instancia de la clase
self.window1.pack() # empaquetado de la clase
self.pack() # empaquetado propio
# creo el main del programa
if __name__ == "__main__":
root = tk.Tk()
MainWindow(root)
root.mainloop()
考虑为您的程序使用模型视图VIEW模型体系结构。看见您发布的代码让我想起了20世纪90年代的Winforms代码,只是Winforms有一个可视化设计器来创建此代码,而您似乎是从头开始编写的。@RobertHarvey。谢谢,我对python编程比较陌生,一般来说,我很难自己找到这样的资源。非常感谢。谢谢你的建议,我没有看到这个错误。@darioperez是的,也许你的代码没有,但是在你的帖子中:
self.label2=tk.Label(self,textvariab=self.txt_carga,bg=“#33ccff”)
。这有一个拼写错误。@jizhaosamayes,在我的代码中我也有它。我必须改进。谢谢