Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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 如何在访问数据之前为tkinter toplevel提供代码_Python_Tkinter_Toplevel - Fatal编程技术网

Python 如何在访问数据之前为tkinter toplevel提供代码

Python 如何在访问数据之前为tkinter toplevel提供代码,python,tkinter,toplevel,Python,Tkinter,Toplevel,在打印内容之前,我试图让tkinter toplevel拥有访问密钥。它不会输出任何错误,但当我提供访问密钥时,它不会将内容打印到我的终端。我更改了访问密钥,但仍然无法打印数据 从tkinter进口* def qw(): global en1 if en1.get() == 2e2c2v: print("You have visa to Paris") tp.destroy() # after printing should close the

在打印内容之前,我试图让tkinter toplevel拥有访问密钥。它不会输出任何错误,但当我提供访问密钥时,它不会将内容打印到我的终端。我更改了访问密钥,但仍然无法打印数据

从tkinter进口*

def qw():
    global en1
    if en1.get() == 2e2c2v:
        print("You have visa to Paris")
        tp.destroy()  # after printing should close the toplevel window
    else:
        print("you dont have access to print the data")


def login_toplevel():
    global en1
    tp = Toplevel()
    tp.geometry("300x300")
    en1 = Entry(tp)
    en1.pack()
    b = Button(tp, text="provide key to print", command=qw)
    b.pack()


root = Tk()
root.geometry("400x400")

b = Button(root, text= "print", command=login_toplevel).pack()

root.mainloop()

好的,从您提供的示例(在我修复缩进后)中,我得到一个“无效语法”错误,因为您试图将
en1.get()
与未声明的变量
2e2c2v
进行比较

更新此行

if en1.get() == 2e2c2v:
。到

if en1.get() == "2e2c2v":

在我这样做之后,它对我来说就像预期的那样工作。

好吧,从您提供的示例中(在我修复了缩进之后),我得到了一个“无效语法”错误,因为您试图将
en1.get()
与您尚未声明的变量
2e2c2v
进行比较

更新此行

if en1.get() == 2e2c2v:
。到

if en1.get() == "2e2c2v":

在我完成这项工作后,它对我起到了预期的作用。

有几个问题:

  • 你的else行的缩进不好(但我认为这是复制/粘贴的错误)

  • 如果en1.get()==2e2c2v:
    应该是
    如果en1.get()==2e2c2v:

  • 在上一次更正后输入右键时出错,因为tp不是全局的
更正后的完整代码应为:

from tkinter import *


def qw():
    global en1
    global tp
    if en1.get() == "2e2c2v":
        print("You have visa to Paris")
        tp.destroy()  # after printing should close the toplevel window
    else:
        print("you dont have access to print the data")


def login_toplevel():
    global en1
    global tp
    tp = Toplevel()
    tp.geometry("300x300")
    en1 = Entry(tp)
    en1.pack()
    b = Button(tp, text="provide key to print", command=qw)
    b.pack()


root = Tk()
root.geometry("400x400")

b = Button(root, text= "print", command=login_toplevel).pack()
root.mainloop()

编辑:

顺便说一下,我认为使用类比使用全局类更好。它会给出这样的结果:

import tkinter as tk

class Example:
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("400x400")

        tk.Button(self.root, text= "print", command=self.login_toplevel).pack()

    def start(self):
        self.root.mainloop()

    def qw(self):
        if self.en1.get() == "2e2c2v":
            print("You have visa to Paris")
            self.tp.destroy()  # after printing should close the toplevel window
        else:
            print("you dont have access to print the data")


    def login_toplevel(self):
        self.tp = tk.Toplevel()
        self.tp.geometry("300x300")
        self.en1 = tk.Entry(self.tp)
        self.en1.pack()
        b = tk.Button(self.tp, text="provide key to print", command=self.qw)
        b.pack()

Example().start()

有几个问题:

  • 你的else行的缩进不好(但我认为这是复制/粘贴的错误)

  • 如果en1.get()==2e2c2v:
    应该是
    如果en1.get()==2e2c2v:

  • 在上一次更正后输入右键时出错,因为tp不是全局的
更正后的完整代码应为:

from tkinter import *


def qw():
    global en1
    global tp
    if en1.get() == "2e2c2v":
        print("You have visa to Paris")
        tp.destroy()  # after printing should close the toplevel window
    else:
        print("you dont have access to print the data")


def login_toplevel():
    global en1
    global tp
    tp = Toplevel()
    tp.geometry("300x300")
    en1 = Entry(tp)
    en1.pack()
    b = Button(tp, text="provide key to print", command=qw)
    b.pack()


root = Tk()
root.geometry("400x400")

b = Button(root, text= "print", command=login_toplevel).pack()
root.mainloop()

编辑:

顺便说一下,我认为使用类比使用全局类更好。它会给出这样的结果:

import tkinter as tk

class Example:
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("400x400")

        tk.Button(self.root, text= "print", command=self.login_toplevel).pack()

    def start(self):
        self.root.mainloop()

    def qw(self):
        if self.en1.get() == "2e2c2v":
            print("You have visa to Paris")
            self.tp.destroy()  # after printing should close the toplevel window
        else:
            print("you dont have access to print the data")


    def login_toplevel(self):
        self.tp = tk.Toplevel()
        self.tp.geometry("300x300")
        self.en1 = tk.Entry(self.tp)
        self.en1.pack()
        b = tk.Button(self.tp, text="provide key to print", command=self.qw)
        b.pack()

Example().start()

将访问键更改为字符串“2e2c2v”,然后为顶级窗口声明全局变量以及
global en1,tp
,并为这两个函数解析它

from tkinter import *


def qw():
    global en1, tp
    if en1.get() == "2e2c2v":
        print("You have visa to Paris")
        tp.destroy()  # after printing should close the toplevel window
    else:
        print("you dont have access to print the data")


def login_toplevel():
    global en1, tp
    tp = Toplevel()
    tp.geometry("300x300")
    en1 = Entry(tp)
    en1.pack()
    b = Button(tp, text="provide key to print", command=qw)
    b.pack()


root = Tk()
root.geometry("400x400")

b = Button(root, text= "print", command=login_toplevel).pack()

root.mainloop()

将访问键更改为字符串“2e2c2v”,然后为顶级窗口声明全局变量以及
global en1,tp
,并为这两个函数解析它

from tkinter import *


def qw():
    global en1, tp
    if en1.get() == "2e2c2v":
        print("You have visa to Paris")
        tp.destroy()  # after printing should close the toplevel window
    else:
        print("you dont have access to print the data")


def login_toplevel():
    global en1, tp
    tp = Toplevel()
    tp.geometry("300x300")
    en1 = Entry(tp)
    en1.pack()
    b = Button(tp, text="provide key to print", command=qw)
    b.pack()


root = Tk()
root.geometry("400x400")

b = Button(root, text= "print", command=login_toplevel).pack()

root.mainloop()

更改为“2e2c2v”后,它会打印数据,但顶级tp不会销毁,因此出现以下错误:NameError:未定义名称“tp”,这是另一个错误。如果您还有其他问题,请提出另一个问题,我将很乐意为您提供帮助。更改为“2e2c2v”后,它会打印数据,但顶级tp不会销毁。出现以下错误:NameError:未定义名称“tp”,这是另一个错误。如果您还有其他问题,请提出另一个问题,我将很乐意在这方面帮助您。