基于python的条形统计图实现

import tkinter as tk
class Stripe():
    def __init__(self,window):
        self.window=window
        self.canvas=None
        canvas = tk.Canvas(self.window, width=800, height=500)
        canvas.pack()
        canvas.create_line(100, 400, 700, 400, fill="black")
        canvas.create_line(100, 400, 100, 0)
        self.canvas=canvas
    def get_stripe(self):
        return self.canvas
    def init_stripe(self):
        self.canvas.delete(tk.ALL)
        self.canvas.create_line(100, 400, 700, 400, fill="black")
        self.canvas.create_line(100, 400, 100, 0)
class Stripegrapy():
    def __init__(self,number,value,stripe):
        self.left_down=[50+100*number,400]
        self.left_up=[self.left_down[0],400-value]
        self.right_down=[self.left_down[0]+50,400]
        self.right_up=[self.right_down[0],400-value]
        self.stripe=stripe
    def add(self):
        self.stripe.create_line(self.left_down[0], self.left_down[1], self.left_up[0], self.right_up[1])
        self.stripe.create_line(self.right_down[0], self.right_down[1], self.right_up[0], self.right_up[1])
        self.stripe.create_line(self.left_up[0], self.left_up[1], self.right_up[0], self.right_up[1])
value=[]
window1=tk.Tk()
window1.title('主窗口')
window1.geometry('950x700')
# button1=tk.Button(window1,text="xxx",activebackground='red',activeforeground='yellow',command=window1.destroy)
# button1.pack()
# canvas1=tk.Canvas(window1,width=800,height=500)
# canvas1.pack()
# canvas1.create_line(100, 400, 700, 400, fill="black")
def addstripegrapy(number,value,stripe):
    if number==0:
        print('输入数值不合法')
        return
    if value>=400:
        print('输入数值过大')
        return
    if value<0:
        print('值不能为负数')
        return
    s=Stripegrapy(number,value,stripe)
    s.add()
def getvalue():
    a=entry1.get()
    value.append(int(a))
    print('输入数值为:',a)
def paint():
    addstripegrapy(len(value), value[len(value)-1],s.get_stripe())
    print(value)
def remove():
    value.clear()
    s.init_stripe()
s=Stripe(window1)
# s1=Stripegrapy(1,100,s.get_stripe())
# s1.add()
# addstripegrapy(2,300,s.get_stripe())
# while True:
#     addstripegrapy()
label1=tk.Label(window1,text='请输入数值:')
label1.pack()
entry1=tk.Entry(window1,bg='yellow',width='20')
entry1.pack()
button1=tk.Button(window1,text="确定",activebackground='red',activeforeground='yellow',command=getvalue)
button1.pack()
button2=tk.Button(window1,text="绘制",activebackground='red',activeforeground='yellow',command=paint)
button2.pack()
button3=tk.Button(window1,text="清除",activebackground='red',activeforeground='yellow',command=remove)
button3.pack()
window1.resizable(0,0)
window1.mainloop()

每组数据上限为400,最多6

若有不懂的地方可以在下面评论,也可以参考我放的链接,这些链接就是本人开发中参考的一些资料

运行效果控制台输出如下:

输入的数据分别为100,200,300,300,200,100

基于python的条形统计图实现_第1张图片

基于python的条形统计图实现_第2张图片

基于python的条形统计图实现_第3张图片

本人才刚刚开始学习python,在了解python gui里面的画布canvas的过程中萌生了做一个条形统计图的想法,通过参考以下资料再结合自己的思考一步步解决问题并最终实现

参考链接如下:

(21条消息) python tkinter 如何锁定窗体尺寸 防止用户调整尺寸 固定大小_慕琦琦的博客-CSDN博客_tkinter 固定窗口大小

(21条消息) Python:tkinter Canvas 删除/清理元素方法_m0_37607730的博客-CSDN博客

python3 tkinter报错:_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid - 正态分个布 - 博客园 (cnblogs.com)

Python中的Tkinter - 不显示Entry Widget - VoidCC

(20条消息) Python Tkinter详解 (一)窗体的创建_geeknuo的博客-CSDN博客

(20条消息) python 图形用户界面tkinter之Entry单行输入文本_LLLLLLLLLLLLIU的博客-CSDN博客

(20条消息) Python图形界面(Tkinter)六:Entry输入框(含API整理)_Nire_Yeyu的博客-CSDN博客

(20条消息) Python tkinter - 第六章 输入控件(Entry)&属性_风华明远的博客-CSDN博客

(20条消息) python中tkinter 详细学习_快乐的孙悟空的博客-CSDN博客

(20条消息) Python之tkinter 文本框Entry的基本应用_qq_1471587327的博客-CSDN博客

(20条消息) python中的tkinter包的使用-canvas画布_Scarlett-CSDN博客

(20条消息) Tkinter 学习-Canvas_tianmuha的博客-CSDN博客

(20条消息) Python tkinter - 第五章 按钮控件(Button)属性_风华明远的博客-CSDN博客

(20条消息) Python3 Tkinter 实例教学 (一)创建第一个窗口_sniperzxl的博客-CSDN博客

(20条消息) python简单图形界面GUI入门——easygui_mingqi1996的博客-CSDN博客

Python3 列表 | 菜鸟教程 (runoob.com)

Python的GUI图形界面工具大全 - 知乎 (zhihu.com)

你可能感兴趣的:(python,python)