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,在了解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)