2

我试图在我想要放置画布的框架内创建一个框架,并在画布内再创建一个帧。在框架内,我想保留实际的画布并启用水平滚动。与早期胎面相同tkinter中的滚动条无法使用画布。帆布块真的很小。`

将tkinter导入为tk从matplotlib.backends.backend_tkagg导入(FigureCanvasTkAgg,NavigationToolbar2Tk)从matplotlib.figure导入figure将matplotlib.pyplot导入为plt将numpy导入为np#---功能---def calculate_gap(需求总和,已分配,容量):如果分配的需求总和<0:sum_of_not_demanded=abs(需求总和-已分配)elif容量-sum_of_demand>0:sum_of_not_demanded=容量-需求总和其他:sum_of_not_demanded=0如果分配的容量>0:spare_capacity=已分配容量其他:备用容量=0如果需求总和-容量>0:技能差距=需求总和-能力其他:技能差距=0return sum_of_not_demanded,spare_capacity,skill_gap定义test_gap():需求总和=256分配=73容量=66sum_of_not_demanded,spare_capacity,skill_gap=计算间隙(sum_off_demand,allocated,capacity)宽度=0.35低于=np.array([sum_of_demand,allocated,capacity])以上=np.array([sum_of_not_demanded,spare_capacity,skill_gap])重量计数={“下方”:np.array([sum_of_demand,allocated,capacity]),“以上”:np.array([sum_of_not_demanded,spare_capacity,skill_gap])}title=['需求','分配','容量']底部=np.zeros(3)对于布尔值,weight_counts.items()中的weight_contount:p=graph4_ax.bar(标题,重量计数,宽度,标签=布尔值,底部=底部)底部+=重量计数graph4_canvas.draw()#canvas1.get_tk_widget().pack(side=“left”,fill=“both”,expand=True)graph4_canvas.get_tk_widget().pack(fill=“both”,expand=True,side=“left”)#graph4_canvas.get_tk_widget().config#graph4_canvas.get_tk_widget().config(xscrollcommand=horizontal_scrollbar.set,#scrollregion=graph4_canvas.get_tk_widget().bbox(“all”))#test_canvas.get_tk_widget().config(xscrollcommand=水平滚动条.set)#test_canvas.get_tk_widget().bind(“<<Key>>”,pop_up)定义mobile_gap():需求总和=256分配=73容量=66sum_of_not_demanded,spare_capacity,skill_gap=计算间隙(sum_off_demand,allocated,capacity)如果需求总和-容量>0:skill_gap=需求总和-容量其他:技能差距=0宽度=0.1重量计数={“下方”:np.array([sum_of_demand,allocated,capacity]),“以上”:np.array([sum_of_not_demanded,spare_capacity,skill_gap])}title=['需求','分配','容量']底部=np.zeros(3)对于布尔值,weight_counts.items()中的weight_contount:p=graph_ax.bar(标题、重量计数、宽度、标签=布尔值、底部=底部)底部+=重量计数graph3_canvas.draw()#canvas1.get_tk_widget().pack(side=“left”,fill=“both”,expand=True)graph3_canvas.get_tk_widget().pack(fill=“both”,expand=True,side=“left”)#graph3_canvas.get_tk_widget().config#graph3_canvas.get_tk_widget().config(xscrollcommand=horizontal_scrollbar.set,#scrollregion=graph3_canvas.get_tk_widget().bbox(“all”))#mobile_canvas.get_tk_widget().config(xscrollcommand=水平滚动条.set)定义graph_two():需求总和=830分配=313容量=339sum_of_not_demanded,spare_capacity,skill_gap=计算间隙(sum_off_demand,allocated,capacity)宽度=0.35重量计数={“下方”:np.array([sum_of_demand,allocated,capacity]),“以上”:np.array([sum_of_not_demanded,spare_capacity,skill_gap])}title=['需求','分配','容量']底部=np.零(3)对于布尔值,weight_counts.items()中的weight_contount:p=graph2_ax.bar(标题、宽度、标签=布尔值,底部=底部)底部+=重量计数graph2_cavas.draw()#canvas1.get_tk_widget().pack(side=“left”,fill=“both”,expand=True)graph2_cavas.get_tk_widget().pack(fill=“both”,expand=True,side=“left”)#graph2_cavas.get_tk_widget().config(滚动区域=graph2_canvas.get_tk_widget(().bbox(“all”))#graph2_cavas.get_tk_widget().config(xscrollcommand=水平滚动条.set,#scrollregion=graph2_cavas.get_tk_widget().bbox(“全部”)#be_cinvas.get_tk_widget().config(xscrollcommand=horizontal_scrollbar.set)定义graph_one():需求总和=1631分配=778容量=795sum_of_not_demanded,spare_capacity,skill_gap=计算间隙(sum_off_demand,allocated,capacity)宽度=0.35重量计数={“下方”:np.array([sum_of_demand,allocated,capacity]),“以上”:np.array([sum_of_not_demanded,spare_capacity,skill_gap])}title=['需求','分配','容量']底部=np.zeros(3)对于布尔值,weight_counts.items()中的weight_contount:p=graph1_ax.bar(标题、重量计数、宽度、标签=布尔值、底部=底部)底部+=重量计数图1_canvas.draw()graph1_cavas.get_tk_widget().pack(fill=“both”,expand=True,side=“left”)#graph1_cavas.get_tk_widget().config(滚动区域=graph1_canvas.get_tk_widget(().bbox(“all”))#graph1_cavas.get_tk_widget().config(xscrollcommand=水平滚动条.set,#scrollregion=graph1_cavas.get_tk_widget().bbox(“全部”)定义大小调整(事件):dashboard_cavas.configure(scrollregion=仪表板画布.bbox('all'))根=tk.tk()根几何图形(“1000x1000”)root.title(“鸡蛋”)main_frame=tk.frame(根)main_frame.pack()# ---frame1=tk.LabelFrame(main_frame,text=“frame One”)frame2=tk.LabelFrame(main_frame,text=“第二帧”)frame1.pack(side=tk.TOP,expand=True,fill=tk.BOTH)frame2.pack(side=tk.TOP,expand=True,fill=tk.BOTH)#帆布dashboard_cavas=tk.canvas(frame1)#,bg='#00c000')#仅用于测试其大小的背景色dashboard_inner_frame=tk.frame(仪表板_画布)inner_frame_id=仪表板canvas.create_window((0,0),window=仪表板inner_frame,anchor='nw')dashboard_cavas.pack(fill=‘both’,expand=True)#滚动条dasboard_scrollbar_x=tk.滚动条(根,方向=“水平”)dasboard_crollbar_x.pack(填充='x')#连接小部件dashboard_cavas.configure(xscrollcommand=dasboard_crollbar_x.set)dasboard_crollbar_x['命令']=仪表板_画布.xview#当绘图有大小时,调整画布上滚动区域的大小(在启动程序并绘制绘图后)dashboard_inner_frame.bind(“<配置>”,调整大小)#---#放在仪表板内框上frame_top=tk.frame(仪表板_内框,宽度=2000)frame_top.pack(fill='both',expand=True)#仪表板_inner_frame.pack(side=tk.LEFT)#plots=[]graph1_fig,graph1_ax=plt.子区(dpi=100)graph1_cavas=图形CanvasTkAgg(graph1_fig,frame_top)#horizontal_scrollbar.config(命令=graph1_canvas.get_tk_widget().xview)#graph1_cavas.get_tk_widget().config(yscrollcommand=水平滚动条.set)#BE帆布graph2_fig,graph2_ax=plt.子区(dpi=100)graph2_cavas=图形CanvasTkAgg(graph2_fig,frame_top)#帆布graph3_fig,graph_ax=plt.子块(dpi=100)graph3_canvas=图形画布TkAgg(graph3_fig,frame_top)#帆布graph4_fig,graph4_ax=plt.子块(dpi=100)graph4_canvas=图形画布TkAgg(graph4_fig,frame_top)graph_one()graph_two()移动地图()测试间隙()#对于范围(10)内的索引:#图=数字(dpi=100)#ax=图add_subplot(111)#ax.图(x,y)#图.suptile(f“绘图{index+1}”)##canvas=FigureCanvasTkAgg(图,主控=frame_top)#打印(画布)#画布绘制()#canvas.get_tk_widget().pack(side=“left”,fill=“both”,expand=True)#canvas.get_tk_widget()['width']=1#plots.append({'fig':fig,'canvas':canvas})root.mainloop()

我有两个主框架)左和右/顶部和底部。在顶部/右侧框架内,我希望有水平滚动的画布。

新贡献者
钱德拉坎思·雷迪是此网站的新贡献者。请注意要求澄清、评论和回答。查看我们的行为准则.
4
  • 你必须把滚动条也放在框架中-tk.滚动条(第1帧)
    – 呋喃
    评论 6月23日13:53
  • 如果你想在其他框架中使用它,那么也许你应该用小部件创建类(就像在代码中一样滚动框架.py)然后使用该类的许多实例
    – 呋喃
    评论 6月23日13:59
  • 顺便说一句:有模块自定义Tkinter customerinter.tomschimansky.com其中有Ctk滚动框架(可能它对canvas使用了相同的方法,但它将其隐藏)。所有小部件看起来都很漂亮
    – 呋喃
    评论 6月23日14:03
  • 可能您需要配置主框架(_F)展开以填充所有窗口空间:main_frame.pack(fill=tk.BOTH,expand=True). 评论 6月24日2:00

0

重置为默认值

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.