为什么我的 tkinter 窗口仅在全局创建时才有效?

k.apps1999

当我创建这个模块时,我首先让 tkinter 窗口(它的所有设置都是全局的)按预期工作。我可以运行模块并且窗口工作,从输入字段获取输入并显示欢迎或错误消息。但是当我将它们放入一个函数中时,它停止正常工作,如图所示。全局创建窗口时的外观,按钮和输入正常工作:

https://gyazo.com/ffcb16416b8a971c09bfa60ee9367bbd

在函数内部创建时的外观:

https://gyazo.com/c8858a2793befafa41e71d1099f021d3

错误消息立即弹出,然后是带有输入字段但没有按钮的主窗口。

这是我在函数内创建窗口和设置的代码:

def userSign(userEntry):
    userId = userEntry.get()
    if userId.isdigit() == True and len(userId) == 4:
        welcomeWindow = tkinter.Tk()
        welcomeWindow.title("Welcome")
        welcomeWindow.geometry("200x50")
        welcome = tkinter.Label(master=welcomeWindow, text="Welcome "+userId,font=("Helvetica", 18, "bold"))
        welcome.grid()
        welcomeWindow.mainloop()
    else:
        errorWindow = tkinter.Tk()
        errorWindow.title("ERROR")
        errorWindow.geometry("500x50")
        error = tkinter.Label(master=errorWindow, text="ERROR: "+userId +" DOES NOT MEET CRITERIA", font=("Helvetica", 18, "bold"))
        error.grid()
        userId=""
        errorWindow.mainloop()      

def show():
    window = tkinter.Tk()
    window.title("Sign In")
    window.geometry("250x100")

    signInPrompt = tkinter.Label(master = window, text = "Enter your ID to sign in")
    signInPrompt.grid(column=0,row=2)

    userEntry = tkinter.Entry(master = window)
    userEntry.grid(column=0,row=4)

    enterButton = tkinter.Button(master = window, text="Sign in", command=userSign(userEntry))
    enterButton.grid(column=0,row=6)

    window.mainloop()

我如何获得它以便我的窗口在函数内部创建时正常工作,因为该模块需要由不同的主模块调用。

无花果梁

您正在创建两个实例,Tk()这是一个坏主意。而是Toplevel()用于其他窗口。

当您在函数内创建变量或小部件时,名称在局部范围内,在函数外不可用。当函数结束时,它们将被垃圾收集。

此外,正如@fhdrsdg 指出的,按钮命令中存在问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tkinter,为什么我的窗口格式是这样的?

来自分类Dev

在 Python Tkinter 中,我已经成功地进行了一个键绑定,但它只有在我被点击进入 tkinter 窗口时才有效。

来自分类Dev

为什么我的Rails AJAX删除方法仅在刷新后才有效?

来自分类Dev

为什么我的Tkinter框架无法填满整个窗口

来自分类Dev

我的底部导航栏仅在我双击以切换片段时才有效

来自分类Dev

glDrawArrays仅在我向其传递“错误”数据时才有效

来自分类Dev

java 应用程序仅在我不在命令行中包含其“.jar”扩展名时才有效,为什么会这样?

来自分类Dev

为什么Tkinter会为我的按钮创建一个新窗口?

来自分类Dev

为什么将文本写入文件仅在从终端调用时才有效?

来自分类Dev

为什么打电话给我时,tkinter消息框没有显示?

来自分类Dev

当我单击停止时,为什么这个Tkinter的“之后”循环没有停止?

来自分类Dev

Angular 仅在我指定 app.get("*"[...]); 时才有效;在我的 server.js 中

来自分类Dev

VBA Excel Workbooks.Open 仅在我先手动打开时才有效

来自分类Dev

为什么我的tkinter应用程序将显示一个node.js窗口?

来自分类Dev

为什么我不能在tkinter Toplevel()窗口中显示图像?

来自分类Dev

为什么我的 tkinter 窗口不会移动超过 1 个像素?

来自分类Dev

当我更改一个菜单的值时,为什么我的所有 tkinter 选项菜单都会更新?

来自分类Dev

为什么tkinter说我有一个由网格管理的奴隶?

来自分类Dev

为什么菜单没有显示?-Tkinter

来自分类Dev

为什么从辅助线程更新tkinter小部件似乎有效?

来自分类Dev

为什么仅当我从参数中删除splat运算符时,这种对Hash#each方法的使用才有效?

来自分类Dev

为什么我的 tkinter 按钮不是我指定的宽度?

来自分类Dev

为什么每当我输入其中一个时,我的所有 tkinter 条目小部件都会填满?

来自分类Dev

我的程序只在我声明一个额外的数组时才有效

来自分类Dev

为什么我在htaccess中的重写规则仅在某些情况下有效?

来自分类Dev

仅当我已经登录SSH时,无密码SSH才有效

来自分类Dev

仅当我保存两次时,Django模型覆盖才有效

来自分类Dev

仅当我已经登录SSH时,无密码SSH才有效

来自分类Dev

在Center上调整对象,仅当我确定宽度时才有效

Related 相关文章

  1. 1

    Tkinter,为什么我的窗口格式是这样的?

  2. 2

    在 Python Tkinter 中,我已经成功地进行了一个键绑定,但它只有在我被点击进入 tkinter 窗口时才有效。

  3. 3

    为什么我的Rails AJAX删除方法仅在刷新后才有效?

  4. 4

    为什么我的Tkinter框架无法填满整个窗口

  5. 5

    我的底部导航栏仅在我双击以切换片段时才有效

  6. 6

    glDrawArrays仅在我向其传递“错误”数据时才有效

  7. 7

    java 应用程序仅在我不在命令行中包含其“.jar”扩展名时才有效,为什么会这样?

  8. 8

    为什么Tkinter会为我的按钮创建一个新窗口?

  9. 9

    为什么将文本写入文件仅在从终端调用时才有效?

  10. 10

    为什么打电话给我时,tkinter消息框没有显示?

  11. 11

    当我单击停止时,为什么这个Tkinter的“之后”循环没有停止?

  12. 12

    Angular 仅在我指定 app.get("*"[...]); 时才有效;在我的 server.js 中

  13. 13

    VBA Excel Workbooks.Open 仅在我先手动打开时才有效

  14. 14

    为什么我的tkinter应用程序将显示一个node.js窗口?

  15. 15

    为什么我不能在tkinter Toplevel()窗口中显示图像?

  16. 16

    为什么我的 tkinter 窗口不会移动超过 1 个像素?

  17. 17

    当我更改一个菜单的值时,为什么我的所有 tkinter 选项菜单都会更新?

  18. 18

    为什么tkinter说我有一个由网格管理的奴隶?

  19. 19

    为什么菜单没有显示?-Tkinter

  20. 20

    为什么从辅助线程更新tkinter小部件似乎有效?

  21. 21

    为什么仅当我从参数中删除splat运算符时,这种对Hash#each方法的使用才有效?

  22. 22

    为什么我的 tkinter 按钮不是我指定的宽度?

  23. 23

    为什么每当我输入其中一个时,我的所有 tkinter 条目小部件都会填满?

  24. 24

    我的程序只在我声明一个额外的数组时才有效

  25. 25

    为什么我在htaccess中的重写规则仅在某些情况下有效?

  26. 26

    仅当我已经登录SSH时,无密码SSH才有效

  27. 27

    仅当我保存两次时,Django模型覆盖才有效

  28. 28

    仅当我已经登录SSH时,无密码SSH才有效

  29. 29

    在Center上调整对象,仅当我确定宽度时才有效

热门标签

归档