单击不同的按钮时,Tkinter应用程序崩溃

阿鲁

几次随机单击按钮后,我的应用程序开始急剧减速,有时标签和按钮完全消失,GUI冻结(“ X”按钮除外,它只是破坏了程序,这是有意的)。

我的猜测是,我要清除窗口的方式(我的clear(self)函数)不是清除它的正确方法,因为无论您单击哪个按钮,我都希望按钮保持不变,应该清除其下方的所有内容。或者也许是我的类结构,我已经看到了创建tkinter类的许多其他方法...,也许我在代码中缺少了核心内容?

到目前为止,我的代码:

from tkinter import *


class LearnTkinter:
    def __init__(self, top):
        self.top = top
        self.title = top.title("LearnTkinter")
        self.configure = top.configure(bg="#d9d9d9", highlightbackground="grey", highlightcolor="darkgrey")

        wWidth = top.winfo_reqwidth()
        wHeight = top.winfo_reqheight()

        x = int(top.winfo_screenwidth() / 2 - (wWidth / 2))
        y = int(top.winfo_screenheight() / 3 - (wHeight / 2))

        top.geometry(f"+{x}+{y}")
        top.minsize(274,520)

        self.Kill = Button(top,text="X",bg="#d9d9d9", command = top.destroy).place(height=54,width=72)
        self.Infos = Button(top, text="i", bg="#d9d9d9", command=self.info_w).place(relx=0.25,height=54,width=72)
        self.Help = Button(top, text="?", bg="#d9d9d9", command=self.help_w).place(relx=0.5,height=54,width=72)
        self.Settings = Button(top, text="O", bg="#d9d9d9", command=self.settings_w).place(relx=0.75,height=54,width=72)

        self.Frame1 = Frame(top, bg="black", relief="groove", borderwidth="8").place(rely=0.1,relheight=0.202,relwidth=1.004)

    def clear(self):
        for widget in top.winfo_children():
            widget.destroy()

            Button(top,text="X", bg="#d9d9d9", command=top.destroy).place(height=54,width=72)
            Button(top, text="i", bg="#d9d9d9", command=self.info_w).place(relx=0.25,height=54,width=72)
            Button(top, text="?", bg="#d9d9d9", command=self.help_w).place(relx=0.5,height=54,width=72)
            Button(top, text="O", bg="#d9d9d9", command=self.settings_w).place(relx=0.75,height=54,width=72)

    def info_w(self):
        self.clear()
        top.title("Info")
        Label(top, text="This is going to be the information section ", bg="grey").place(rely=0.1, relwidth=1)

    def help_w(self):
        self.clear()
        top.title("Help")
        Label(top, text="This is going to be the help center", bg="grey").place(rely=0.1, relwidth=1)

    def settings_w(self):
        self.clear()
        top.title("Settings")



top = Tk()
exa_gui = LearnTkinter(top)
top.mainloop()
雅库布·斯劳(Jakub Szlaur)

您的问题是每次迭代都在clear函数中创建4新按钮。

  • 例如:如果您一开始有5个小部件(4个按钮+ 1个框架)。首次调用clear函数后,您创建了5 * 4新按钮!第二次调用功能按钮时,您创建了5 * 4 * 4新按钮。这是80GUI中的新小部件。第四次通话后,您已经有了1280新按钮!
  • 您可以想象这是太多的小部件,而GUI只会冻结。

因此,如果您在for loop(而不是在!期间)之前或之后移动按钮的创建,它将使您的滞后消失:

def clear(self):
    for widget in self.top.winfo_children():
        widget.destroy()

    Button(self.top, text="X", bg="#d9d9d9", command=self.top.destroy).place(height=54,width=72)
    Button(self.top, text="i", bg="#d9d9d9", command=self.info_w).place(relx=0.25,height=54,width=72)
    Button(self.top, text="?", bg="#d9d9d9", command=self.help_w).place(relx=0.5,height=54,width=72)
    Button(self.top, text="O", bg="#d9d9d9", command=self.settings_w).place(relx=0.75,height=54,width=72)

还有一件事:

  • 在类的所有方法中,LearnTkinter您都引用top变量。
  • 但是,当您调用此变量时,您不是在使用前缀self.top而是在使用top
  • 在所有函数/方法中更改此设置。
  • 它之所以起作用,是因为您还(偶然)top在程序中命名了变量。

top变量:

top = Tk() #You are referring in you 'LearnTkinter' class to this variable. Not the one 'inside' the class.
exa_gui = LearnTkinter(top)
top.mainloop()

我知道在python中您实际上是指向同一个对象。但是,这样做的原因是相同的名称。尝试更改它,您将看到它将无法工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击按钮时应用程序崩溃

来自分类Dev

单击后退按钮时,Phonegap Android应用程序崩溃

来自分类Dev

当我单击按钮时,应用程序崩溃

来自分类Dev

单击硬件设置按钮时,应用程序崩溃

来自分类Dev

我的应用程序在单击按钮时崩溃

来自分类Dev

单击按钮时,Android应用程序崩溃

来自分类Dev

单击按钮时应用程序意外崩溃

来自分类Dev

单击按钮时如何阻止应用程序崩溃?

来自分类Dev

单击提交按钮时我的应用程序崩溃

来自分类Dev

Android按钮单击崩溃应用程序

来自分类Dev

SWIFT单击按钮应用程序崩溃

来自分类Dev

单击按钮后,应用程序崩溃

来自分类Dev

单击应用程序图标时,应用程序崩溃

来自分类Dev

单击按钮时应用程序停止

来自分类Dev

单击按钮(“意图”)将其打开时,Google Maps在我的应用程序上崩溃

来自分类Dev

当我单击某个按钮时,为什么我的应用程序崩溃?

来自分类Dev

单击放在片段中的按钮时,Android应用程序崩溃

来自分类Dev

启动时添加按钮单击事件使应用程序崩溃

来自分类Dev

当我单击按钮时,Android 应用程序崩溃,onClickListener 出现问题

来自分类Dev

当我单击打开弹出窗口的按钮时应用程序崩溃

来自分类Dev

单击按钮开始新活动时,我的应用程序崩溃

来自分类Dev

当我单击菜单按钮时,Android 应用程序崩溃

来自分类Dev

应用程序正常运行,但在单击注销按钮时崩溃

来自分类Dev

单击按钮后,Android Studio应用程序不断崩溃

来自分类Dev

输入密码后单击按钮后应用程序崩溃

来自分类Dev

单击“显示应用程序”按钮后 Ubuntu 崩溃

来自分类Dev

单击按钮导致应用程序崩溃 Android Studio

来自分类Dev

单击按钮后我的应用程序崩溃

来自分类Dev

单击按钮时,Android Studio 中的应用程序崩溃。显示应用名称已停止工作

Related 相关文章

  1. 1

    单击按钮时应用程序崩溃

  2. 2

    单击后退按钮时,Phonegap Android应用程序崩溃

  3. 3

    当我单击按钮时,应用程序崩溃

  4. 4

    单击硬件设置按钮时,应用程序崩溃

  5. 5

    我的应用程序在单击按钮时崩溃

  6. 6

    单击按钮时,Android应用程序崩溃

  7. 7

    单击按钮时应用程序意外崩溃

  8. 8

    单击按钮时如何阻止应用程序崩溃?

  9. 9

    单击提交按钮时我的应用程序崩溃

  10. 10

    Android按钮单击崩溃应用程序

  11. 11

    SWIFT单击按钮应用程序崩溃

  12. 12

    单击按钮后,应用程序崩溃

  13. 13

    单击应用程序图标时,应用程序崩溃

  14. 14

    单击按钮时应用程序停止

  15. 15

    单击按钮(“意图”)将其打开时,Google Maps在我的应用程序上崩溃

  16. 16

    当我单击某个按钮时,为什么我的应用程序崩溃?

  17. 17

    单击放在片段中的按钮时,Android应用程序崩溃

  18. 18

    启动时添加按钮单击事件使应用程序崩溃

  19. 19

    当我单击按钮时,Android 应用程序崩溃,onClickListener 出现问题

  20. 20

    当我单击打开弹出窗口的按钮时应用程序崩溃

  21. 21

    单击按钮开始新活动时,我的应用程序崩溃

  22. 22

    当我单击菜单按钮时,Android 应用程序崩溃

  23. 23

    应用程序正常运行,但在单击注销按钮时崩溃

  24. 24

    单击按钮后,Android Studio应用程序不断崩溃

  25. 25

    输入密码后单击按钮后应用程序崩溃

  26. 26

    单击“显示应用程序”按钮后 Ubuntu 崩溃

  27. 27

    单击按钮导致应用程序崩溃 Android Studio

  28. 28

    单击按钮后我的应用程序崩溃

  29. 29

    单击按钮时,Android Studio 中的应用程序崩溃。显示应用名称已停止工作

热门标签

归档