報錯場景&原因
在界面設計時,想實時更新用matplotlib繪制的圖像,即會一次次的調用plot函數,這樣就會重復地向groupbox里面添加布局,但是一個容器只能有一個布局,因此會報錯
def __init__(self):super(weibo_search_logic, self).__init__()self.setupUi(self)self.setWindowIcon(QIcon(r"resources/icon.ico"))self.run()def plot(self,li): result_dict = li[-1]negative,medium,positive = result_dict["負"],result_dict["中"],result_dict["正"]self.gridlayout2 = QGridLayout(self.groupBox) # 繼承容器groupBoxself.F2 = MyFigure(width=4, height=5, dpi=100)# 將橫、縱坐標軸標準化處理,確保餅圖是一個正圓,否則為橢圓self.F2.axes = self.F2.fig.add_subplot(111)# self.F2.axes(aspect='equal')# 繪制餅圖self.F2.axes.pie(x=[negative,medium,positive], # 繪圖數據labels=['負向', '中性', '正向'], # 添加教育水平標簽autopct='%.2f%%', # 設置百分比的格式,這里保留一位小數pctdistance=0.8, # 設置百分比標簽與圓心的距離labeldistance=1.55, # 設置水平標簽與圓心的距離startangle=180, # 設置餅圖的初始角度radius=1.3, # 設置餅圖的半徑counterclock=False, # 是否逆時針,這里設置為順時針方向wedgeprops={'linewidth': 1.5, 'edgecolor': 'red'}, # 設置餅圖內外邊界的屬性值# textprops={'fontsize': 10, 'color': 'black'}, #設置文本標簽的屬性值)# 添加圖標題self.F2.axes.set_title('情感傾向占比圖')self.F2.fig.legend()# self.F2.fig.tight_layout()self.gridlayout2.addWidget(self.F2, 0, 0)print(positive)
解決方案?
將布局代碼放在__init__函數中,運行一次,如果要實時更新的話,需要調用self.gridlayout2.update()來更新容器布局中的圖像
?def __init__(self):super(weibo_search_logic, self).__init__()self.setupUi(self)self.setWindowIcon(QIcon(r"resources/icon.ico"))self.gridlayout2 = QGridLayout(self.groupBox) ?# 繼承容器groupBoxself.run()
def plot(self,li): result_dict = li[-1]negative,medium,positive = result_dict["負"],result_dict["中"],result_dict["正"]self.F2 = MyFigure(width=4, height=5, dpi=100)# 將橫、縱坐標軸標準化處理,確保餅圖是一個正圓,否則為橢圓self.F2.axes = self.F2.fig.add_subplot(111)# self.F2.axes(aspect='equal')# 繪制餅圖self.F2.axes.pie(x=[negative,medium,positive], # 繪圖數據labels=['負向', '中性', '正向'], # 添加教育水平標簽autopct='%.2f%%', # 設置百分比的格式,這里保留一位小數pctdistance=0.8, # 設置百分比標簽與圓心的距離labeldistance=1.55, # 設置水平標簽與圓心的距離startangle=180, # 設置餅圖的初始角度radius=1.3, # 設置餅圖的半徑counterclock=False, # 是否逆時針,這里設置為順時針方向wedgeprops={'linewidth': 1.5, 'edgecolor': 'red'}, # 設置餅圖內外邊界的屬性值# textprops={'fontsize': 10, 'color': 'black'}, #設置文本標簽的屬性值)# 添加圖標題self.F2.axes.set_title('情感傾向占比圖')self.F2.fig.legend()# self.F2.fig.tight_layout()self.gridlayout2.addWidget(self.F2, 0, 0)self.gridlayout2.update()print(positive)