Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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,我的程序有一个类main和函数,第一个是\uuu init\uuu,带有参数self和master。这是从登录窗口开始的,所以我想销毁该函数\uuu init\uuuu,但我对此一无所知,我不能://我已经尝试了self.master.destroy(),这些东西消失了,但仍然显示一个空窗口。有人能帮我吗 from tkinter import * from tkinter import messagebox as ms from PIL import Image, ImageTk import

我的程序有一个类main和函数,第一个是
\uuu init\uuu
,带有参数
self
master
。这是从登录窗口开始的,所以我想销毁该函数
\uuu init\uuuu
,但我对此一无所知,我不能://我已经尝试了
self.master.destroy()
,这些东西消失了,但仍然显示一个空窗口。有人能帮我吗

from tkinter import *
from tkinter import messagebox as ms
from PIL import Image, ImageTk
import os
import time
import pymysql

root = Tk()
root.title('Sistema de Senhas')

root.configure(background='white')

class main:
    def __init__(self,master):
        self.master = master
        self.username = StringVar()
        self.password = StringVar()

        self.logf = Frame(self.master,padx =10,pady = 10, bg='white')
        Label(self.logf,text = 'Utilizador: ',font = ('Corbel bold',13), bg= 'white',pady=5,padx=5).grid(sticky = W)
        Entry(self.logf,textvariable = self.username,bd = 2,font = ('Corbel bold',11)).grid(row=0,column=1)
        Label(self.logf,text = 'Palavra-passe: ',font = ('Corbel bold',13), bg= 'white',pady=5,padx=5).grid(sticky = W)
        Entry(self.logf,textvariable = self.password,bd = 2,font = ('Corbel bold',11),show = '*').grid(row=1,column=1)
        self.logf.pack()

        self.button = Button(self.master,text = 'Entrar',bd = 2 ,font = ('Corbel bold',12), relief='groove', bg= 'white',padx=5,pady=2,command=self.login)
        self.button.pack()

    def login(self):

        utilizador=self.username.get()
        password=self.password.get()

        self.connection = pymysql.connect(host="localhost", user="root", passwd="", database="sistemasenhas")
        self.cur = self.connection.cursor()

        query="SELECT * FROM utilizadores WHERE nome=%s AND password=%s"
        data=self.cur.execute(query,(utilizador,password))

        if(len(self.cur.fetchall())>0):
            query="SELECT * FROM utilizadores WHERE nome=%s AND password=%s AND acesso=0"
            data=self.cur.execute(query,(utilizador,password))
            if(len(self.cur.fetchall())>0):
                master.destroy() # It's here
                self.janela()
            else:
                master.destroy() It's here
                self.admin()
        else:
            ms.showerror('Oops','Utilizador ou palavra-passe incorretos!')

你的问题有点令人困惑。您的示例没有显示如何使用
destroy()
,也没有解释在类
main
中尝试执行的操作。您不想破坏“方法”
\uuuu init\uuu
您可能想关闭一个窗口或根窗口。根据您的问题和示例,我猜您正在尝试创建登录窗口

也就是说,
destroy()
是正确的方法

下面是一个使用您的代码的简单示例,展示了如何关闭它

from tkinter import *


root = Tk()
root.title('Login system')
root.configure(background='white')

class main:
    def __init__(self,master):
        Button(master, text='Exit', command=master.destroy).pack()

main(root)
root.mainloop()
下面是一个更简洁的示例,它遵循OOP模型

import tkinter as tk


class Main(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Login system')
        self.configure(background='white')
        tk.Button(self, text='Exit', command=self.destroy).pack()

Main().mainloop()

你到底在干什么?你的例子不能解释你在做什么。也就是说,
destroy()
是您正在寻找的方法,它只取决于您正在做什么来告诉您如何正确使用它。我被这个问题弄糊涂了。您所说的“destroy That function
\uuuuu init\uuuuu
是什么意思?@Mike SMT我只想让登录窗口在用户完成登录后永远消失login@Josu是的,
destroy()
就是你所需要的。看看我的答案。我试过master.destroy()现在给我一个错误:“名称‘master’未定义”。我可以在这里显示我的代码以帮助我吗?@JosuéFreitas
master
仅在
\uuuuu init\uuu
方法中可用。您需要用可测试的内容更新您的问题,以便我给出更完整的答案。@JosuéFreitas您不能在init方法之外使用master。如果需要,则必须使用
self.
前缀将其定义为类属性。因此,在
login
方法中,使用
self.master
而不是
master
。另外,在master.destroy之后调用
self.janela()
,这是行不通的。您可能需要将此内容带到代码审阅并发布完整的代码。有很多地方需要改变。