Python无意中在运行时执行命令

时间:2018-03-19 02:26:35

标签: python python-3.x tkinter windows-10

大家好!我首先为我缺乏编码知识而道歉,我目前正在尝试自己学习Python,并且很有趣。"我唯一的正规教育来自多年前的高中Java AP课程。

我目前在Windows 10操作系统上使用Python版本3.6,使用PyCharm IDE。

运行时,我的基于Tkinter GUI的应用程序会自动执行我在类下定义的退出函数。只有当用户点击"终止"窗口才能关闭所需的效果。 GUI窗口中的按钮。

到目前为止我的代码如下:

import webbrowser
import tkinter as ttk
from PIL import ImageTk, Image

##Application main window setup.
window = ttk.Tk()
window.maxsize(width=200, height=200)
window.minsize(width=200,height=200)
window.config(bg=("black"))
window.title("Hello World")


##Set a 'class' for exit function of application.
class Exit():
##Defines the countdown timer and sets parameters that need to be satisfied before exit.
    def timer(self):
        countdown = 3
        self.x = int
        for self.x in reversed(range(0,countdown + 1)):
            print(self.x)
        ##When 'x' reahces -1 the application exits.
        if self.x > -1:
            print("Bye!")
            window.destroy()
        ##Otherwise a label displaying a text message appears.
        else:
            swell = ttk.Label(text=("'Hello World!'"),bg=("black"),fg=("white"),font=("Times New Roman",12,"bold"))
            swell.place(x=50,y=50)

##Retrieve the defined 'timer' function from the 'Exit' class.
exit=Exit()
exit.timer()

##Button with attahced command to execute the exit of application via user input.
quitButton=ttk.Button(
    window,text=("Terminate"),bg=("red"),fg=("white"),font=("bold"),width=20,height=1,anchor=ttk.S,command=lambda: exit)
quitButton.place(x=6,y=150)



window.mainloop()

感谢任何形式的帮助,我提前感谢你。

*作为旁注,我可以从按钮成功发出命令,但检索到的功能只有一行。我似乎无法处理多行代码。

1 个答案:

答案 0 :(得分:2)

我认为发生的事情是你在timer类方法中破坏了窗口。在for循环之后,x将等于0.因此它大于-1,并且窗口类被销毁。 Quitbutton尝试使用窗口,但它已被破坏。

在输出中我假设你看到'再见'

我得到了正确的结果:

import tkinter as ttk
from time import sleep

##Application main window setup.
window = ttk.Tk()
window.maxsize(width=200, height=200)
window.minsize(width=200, height=200)
window.config(bg=("black"))
window.title("Hello World")


##Set a 'class' for exit function of application.
class Exit():
    """
    Defines the countdown timer and sets parameters 
    that need to be satisfied before exit.
    """
    def __init__(self):
        self.countdown = 3
        swell = ttk.Label(text=("Hello World!"), bg=("black"),
                          fg=("white"), font=("Times New Roman", 12, "bold"))
        swell.place(x=50,y=50)

    def quit(self):
        for iteration in reversed(range(0, self.countdown + 1)):
            print(iteration)
            sleep(1)
        print("Bye!")
        window.destroy()

##Retrieve the defined 'timer' function from the 'Exit' class.
exit=Exit()

##Button with attahced command to execute the exit of application via user input.
quitButton=ttk.Button(
    window,text=("Terminate"), bg=("red"), fg=("white"), font=("bold"),
    width=20, height=1, anchor=ttk.S, command=lambda: exit.quit())
quitButton.place(x=6,y=150)


window.mainloop()

你可以在这里看到我在exit类中也使用了init方法。它是一种特殊的方法,可以在启动类时自动运行。

它不需要太多改变。我所做的只是将销毁窗口函数移动到它自己的类方法中,并设置第二个窗口实例命令来运行此方法。