总是报错application has been destroyed怎么解决
时间: 2023-08-05 19:04:56 浏览: 129
dubbo应用启动与停止脚本
这个错误通常是因为你在窗口已经被销毁之后,仍然尝试访问它的方法或属性,或者在销毁窗口之后,仍然尝试创建新的组件。你可以在使用 `place()` 方法之前,加上一个检查窗口是否存在的条件,例如:
```python
if hasattr(root, 'winfo_exists') and root.winfo_exists():
a6.place(x=600, y=100, height=100, width=500)
```
这样就可以避免在窗口被销毁之后,仍然尝试使用 `place()` 方法导致出现错误。完整的代码可以参考以下示例:
```python
import tkinter as tk
from tkinter import messagebox
from sklearn.model_selection import train_test_split
root = tk.Tk()
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.test_size_var = tk.StringVar()
self.test_size_var.set('0.3')
self.test_size_label = tk.Label(self, text='测试集比例:')
self.test_size_label.pack(side='left')
self.test_size_entry = tk.Entry(self, textvariable=self.test_size_var)
self.test_size_entry.pack(side='left')
self.split_button = tk.Button(self, text='划分数据集', command=self.split_data)
self.split_button.pack(side='left')
def split_data(self):
test_size = self.test_size_var.get()
try:
test_size = float(test_size)
except ValueError:
messagebox.showerror('错误', '请输入正确的比例值!')
return
# 进行数据集划分
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=test_size, random_state=42)
huafen = f'X_train: {X_train}, X_test: {X_test}, y_train: {y_train}, y_test: {y_test}'
global c
global a6
if hasattr(root, 'winfo_exists') and root.winfo_exists():
if c == True:
c = False
a6 = tk.Text(root)
a6.place(x=600, y=100, height=100, width=500)
a6.insert(tk.END, huafen)
else:
a6.place_forget()
c = True
c = True
X = []
y = []
app = Application(master=root)
app.place(x=600, y=65)
root.mainloop()
```
注意,在这个示例中,我们首先定义了一个 `root` 对象作为主窗口,在 `Application` 中使用 `root` 对象创建组件。在 `split_data` 方法中,我们使用 `hasattr()` 函数来检查主窗口是否存在,如果主窗口存在,则使用 `place()` 方法创建或销毁 `a6` 组件,否则不做任何操作。
阅读全文