Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的代码中的按钮一直按下?_Python_Tkinter - Fatal编程技术网

Python 为什么我的代码中的按钮一直按下?

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

我真的知道为什么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 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,在我的代码中我也有它。我必须改进。谢谢