AttributeError: 'list' object has no attribute '_get_lines'
时间: 2024-05-23 13:08:28 浏览: 148
这个错误通常发生在使用matplotlib库绘图时,可能是因为你在使用这个库时调用了一个不存在的方法或属性。具体来说,'_get_lines'是matplotlib库中FigureCanvas类的一个私有方法,而这个错误提示说明你在一个列表对象上尝试调用这个不存在的方法。
要解决这个问题,你可以检查你的代码中是否有错误的调用,或者查看你的代码是否与matplotlib库版本不兼容。此外,你可以尝试升级matplotlib库的版本来解决这个问题。
相关问题
AttributeError: 'FigureCanvasQTAgg' object has no attribute 'get_tk_widget'
这个错误通常是因为使用的 Matplotlib 版本不同导致的,可以尝试使用以下代码替换掉原来的:
```python
import tkinter as tk
from tkinter import ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
# 数据示例
data = {
'list1': [1, 3, 2, 4, 6, 5],
'list2': [5, 4, 6, 3, 2, 1],
'list3': [2, 4, 3, 5, 6, 1]
}
# 创建主窗口
root = tk.Tk()
root.title('折线图示例')
# 创建画布
fig = plt.figure(figsize=(6, 4), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
# 创建菜单栏
frame = tk.Frame(root)
frame.pack(side=tk.LEFT, fill=tk.Y)
# 创建选项框
var1 = tk.BooleanVar()
var2 = tk.BooleanVar()
var3 = tk.BooleanVar()
check1 = ttk.Checkbutton(frame, text='列表1', variable=var1)
check2 = ttk.Checkbutton(frame, text='列表2', variable=var2)
check3 = ttk.Checkbutton(frame, text='列表3', variable=var3)
check1.pack(side=tk.TOP, fill=tk.X)
check2.pack(side=tk.TOP, fill=tk.X)
check3.pack(side=tk.TOP, fill=tk.X)
# 绘制折线图
lines = []
for name, values in data.items():
lines.append(plt.plot(values, label=name)[0])
plt.legend()
# 更新选项框状态
def update_checkboxes():
var1.set(lines[0].get_visible())
var2.set(lines[1].get_visible())
var3.set(lines[2].get_visible())
# 更新折线图
def update_plot():
for i, line in enumerate(lines):
line.set_visible([var1.get(), var2.get(), var3.get()][i])
canvas.draw()
# 绑定事件
check1.bind('<Button-1>', lambda e: update_plot())
check2.bind('<Button-1>', lambda e: update_plot())
check3.bind('<Button-1>', lambda e: update_plot())
update_checkboxes()
update_plot()
# 运行主循环
root.mainloop()
```
这个版本的代码使用了 `FigureCanvasTkAgg` 类来创建画布,并且调用其 `draw` 方法来初始化绘图。同时,修改了获取画布对象的方法,使用 `get_tk_widget` 方法来获取 Tkinter 的窗口部件。
train_data = MyDataset(txt='train_list.txt', transform=transforms.ToTensor()) AttributeError: 'list' object has no attribute 'ToTensor'
这个错误提示很明显,是因为在传入数据集时将一个列表传入了 transform 参数,而列表对象没有 ToTensor() 属性。正确的做法是将数据集传入 DataReader 中,然后对数据集进行 ToTensor() 处理。代码示例:
```
import torch.utils.data as Data
import torchvision.transforms as transforms
class DataReader():
def __init__(self, txt_path):
self.txt_path = txt_path
def get_dataset(self):
with open(self.txt_path) as f:
lines = f.readlines()
dataset = []
for line in lines:
line = line.strip().split()
img_path, label = line[0], line[1]
dataset.append((img_path, label))
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
dataset = MyDataset(dataset, transform=transform)
return dataset
txt_path = "train_list.txt"
train_data = Data.DataLoader(
dataset=DataReader(txt_path).get_dataset(),
batch_size=32,
shuffle=True,
drop_last=True,
num_workers=2,
)
```
阅读全文