如何在访问数据之前为 tkinter 顶层提供代码

How to provide code for tkinter toplevel before data can be accessed

我试图让我的 tkinter 顶层在内容可以之前有一个访问密钥 printed.It 没有输出任何错误但是当我提供访问密钥时它没有将内容打印到我的 terminal.I 更改了访问密钥,但我仍然无法打印数据。

从 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()

好吧,根据您提供的示例(在我修复缩进后),我得到一个 "Invalid Syntax" 错误,因为您试图将 en1.get() 与变量 2e2c2v 进行比较你还没有申报。

更新此行。 . .

if en1.get() == 2e2c2v:

。 . .到 。 . .

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

在我这样做之后,它按预期对我有用。

有几个问题:

  • 你的其他行的缩进不好(但我认为这是 copy/paste 的错误)

  • if en1.get() == 2e2c2v: 应该是 if 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()

编辑:

顺便说一句,我认为使用 class 而不是使用全局会更好。它会给出类似的东西:

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”,然后也为 Toplevel window 声明全局变量 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()