m0_64677750 2023-01-08 21:15 采纳率: 50%
浏览 19
已结题

如何让无向图显示到用户界面里


def main():
            
        
       

# 问题 2:无向图的最短路问题(司守奎,数学建模算法与应用,P43,例4.3)
             G2 = nx.Graph()  # 创建:空的 有向图

             G2.add_edge('A', 'B', weight=1)  # 添加 带权边,weight表示边权
             G2.add_edge('A', 'D', weight=7)
             G2.add_edge('B', 'E', weight=4)
             G2.add_edge('D', 'E', weight=3)
             G2.add_edge('F', 'G', weight=4)
             G2.add_edge('F', 'E', weight=5)
             G2.add_edge('G', 'K', weight=9)

# 两个指定顶点之间的最短加权路径
             source=nameEntry3.get()
             target=nameEntry4.get()
             minWPath_v1_v5 = nx.dijkstra_path(G2, source, target)  # 顶点 0 到 顶点 3 的最短加权路径
             return minWPath_v1_v5
             # 两个指定顶点之间的最短加权路径的长度
             lMinWPath_v1_v5 = nx.dijkstra_path_length(G2, source, target)  # 最短加权路径长度
             return lMinWPath_v1_v5
             plt.clf()
             pos = nx.spring_layout(G2)  # 用 FR算法排列节点
             nx.draw(G2, pos, with_labels=True, alpha=0.5)
             labels = nx.get_edge_attributes(G2, 'weight')
             nx.draw_networkx_edge_labels(G2, pos, edge_labels=labels)
              # plt.show()


             edgeList = []
             for i in range(len(minWPath_v1_v5)-1):
                edgeList.append((minWPath_v1_v5[i], minWPath_v1_v5[i+1]))
             nx.draw_networkx_edges(G2, pos, edgelist=edgeList, edge_color='m', width=4) 
             # 设置边的颜色
             
             plt.savefig('path' +'.jpg')
             filename = ".\path.jpg"
             image = Image.open(filename)
             photo = ImageTk.PhotoImage(image)
             canvas.create_image(450,250,image = photo)
             canvas.update()
             time.sleep(sleep_time)
      
      frame_mid = Frame(width=800,height=100,bg='white') 
      frame_mid.grid(row=8,column=10,rowspan=6,columnspan=2,padx=4, pady=5)
      
      canvas = Canvas(frame_mid,width = 800,height = 600,bg = '#FFCCCC')#画板
      
      canvas.grid()



                

            
      def main2():
            
               
               EditText.insert(tkinter.END,main())
             
      EditText=tkinter.Text(window2,width=15,height=5)
      EditText.grid(row=8,column=8)
      def main3():
          main()
      
        
     
      q=tkinter.Button(window2,text="确定", font=('宋体',15),command=main2)
      q.grid(row=7,column=6)
      q=tkinter.Button(window2,text="确定", font=('宋体',15),command=main3)
      q.grid(row=7,column=8

为什么我用networkx和canvas画的图显示不到tkinter里
该如何让它显示呢

  • 写回答

1条回答 默认 最新

  • ShowMeAI 2023-01-08 22:18
    关注

    首先,您需要安装 NetworkX 和 matplotlib 库来绘制图像。然后,可以使用 NetworkX 库中的 draw 函数来绘制图。将图绘制到画布上,然后将画布放置在您的用户界面中的相应位置即可。


    以下是一个例子,其中使用 Tkinter 库创建了一个简单的用户界面,并在其中绘制了一个无向图:

    import tkinter as tk
    import networkx as nx
    import matplotlib.pyplot as plt
    
    # 创建一个窗口
    window = tk.Tk()
    
    # 创建一个画布
    canvas = tk.Canvas(window, width=600, height=600)
    canvas.pack()
    
    # 创建一个无向图
    G = nx.Graph()
    G.add_edge('A', 'B', weight=1)
    G.add_edge('A', 'D', weight=7)
    G.add_edge('B', 'E', weight=4)
    G.add_edge('D', 'E', weight=3)
    G.add_edge('F', 'G', weight=4)
    G.add_edge('F', 'E', weight=5)
    G.add_edge('G', 'K', weight=9)
    
    # 绘制图像
    pos = nx.spring_layout(G)  # 使用 FR 算法排列节点
    nx.draw(G, pos, with_labels=True, alpha=0.5, on=canvas)
    labels = nx.get_edge_attributes(G, 'weight')
    nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, on=canvas)
    
    # 显示窗口
    window.mainloop()
    

    上述代码使用了 NetworkX 库中的 spring_layout 函数来排制节点的位置,然后使用 draw 函数绘制图像。还使用了 get_edge_attributes 函数和 draw_networkx_edge_labels 函数来绘制边的标签。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。