软件界面如下:
生成一组成绩
7个成绩的均值即为84
软件链接如下,链接永久有效
链接:https://pan.baidu.com/s/1l-0g3v1yy1B0f96nLIj6qA?pwd=489q
提取码:489q
软件源码如下:
from tkinter import *
import random
class app(Tk):
def __init__(self,size='800x500'):
"""构造根窗口"""
super().__init__()
#标签
self.__labels = {}
self.__labelnum = 0
#文本框
self.__texts = {}
self.__textnum = 0
#按钮
self.__buttons = {}
self.__buttonnum = 0
#输入框
self.__entrys = {}
self.__entrynum = 0
self.title('root')
self.geometry(size)
#name-组件id
#bg-背景色、fg-前景色、font-字体
# x,y-左上角第一个像素位置坐标
#relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
def create_label(self,
#标签样式
name='label', bg='#d3fbfb', \
fg='red', font=('宋体',15), \
width=100, height=50, \
relief=SUNKEN, \
#标签布局,采用place()绝对位置法
x=100,y=50
):
self.__labelnum += 1
self.__labels[name] = {}
self.__labels[name]['strvar'] = StringVar()
self.__labels[name]['strvar'].set(name)
self.__labels[name]['label'] = Label(self, textvariable=self.__labels[name]['strvar'], \
bg=bg, \
fg=fg, \
font=font, \
relief=relief)
self.__labels[name]['label'].place(x=x,y=y,height=height,width=width)
def set_label(self,name,str):
self.__labels[name]['strvar'].set(str)
@property
def labelnum(self):
return self.__labelnum
def labels(self,name):
return self.__labels[name]['label']
# name-组件id
# bg-背景色、fg-前景色、font-字体
# relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
#x,y-左上角第一个像素位置坐标
def create_text(self,
name='text', bg='#d3fbfb', \
fg='black', font=('宋体', 20), \
width=500, height=300, \
relief=SUNKEN, \
# 布局,采用place()绝对位置法
x=300, y=20
):
self.__textnum += 1
self.__texts[name] = {}
self.__texts[name]['text'] = Text(self,
bg=bg, \
fg=fg, \
font=font, \
relief=relief
)
self.__texts[name]['text'].place(x=x, y=y, height=height, width=width)
def text_set_here(self,name,here=1.0):
'''用‘here’标记一个位置'''
return self.__texts[name]['text'].mark_set('here',here)
def text_insert(self,name,mark='insert',str=''):
'''mark可以设置为 ‘here’ '''
self.__texts[name]['text'].insert(mark,str)
def text_get(self,name,first=1.0,last='end'):
'''给定first和last来索引文本框中的字符串'''
return self.__texts[name]['text'].get(first,last)
def clear_text(self,name):
'''清空文本框'''
self.__texts[name]['text'].delete(1.0, 'end')
@property
def textnum(self):
return self.__textnum
def texts(self,name):
return self.__texts[name]['text']
# name-组件id
# bg-背景色、fg-前景色、font-字体
# relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
# command-事件响应函数
# x,y-左上角第一个像素位置坐标
def create_button(self,
#标签样式
name='button', bg='white', \
fg='black', font=('宋体',15), \
width=100, height=40, \
relief=RIDGE, command = None, \
#标签布局,采用place()绝对位置法
x=100,y=50
):
self.__buttonnum += 1
self.__buttons[name] = {}
self.__buttons[name]['strvar'] = StringVar()
self.__buttons[name]['strvar'].set('按钮')
self.__buttons[name]['button'] = Button(self,
bg=bg, \
fg=fg, \
textvariable=self.__buttons[name]['strvar'],
font=font, \
relief=relief,\
command = command)
self.__buttons[name]['button'].place(x=x,y=y,height=height,width=width)
def set_button_text(self,name,str):
self.__buttons[name]['strvar'].set(str)
@property
def buttonnum(self):
return self.__buttonnum
def buttons(self,name):
return self.__buttons[name]['button']
# name-组件id
# bg-背景色、fg-前景色、font-字体
# relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
#x,y-左上角第一个像素位置坐标
def create_entry(self,
name='entry', bg='#d3fbfb', \
fg='red', font=('宋体', 20), \
width=200, height=30, \
relief=SUNKEN, \
# 布局,采用place()绝对位置法
x=300, y=20
):
self.__entrynum += 1
self.__entrys[name] = {}
self.__entrys[name]['strvar'] = StringVar()
self.__entrys[name]['strvar'].set('请输入内容')
self.__entrys[name]['entry'] = Entry(self,
bg=bg, \
fg=fg, \
font=font, \
relief=relief,\
textvariable=self.__entrys[name]['strvar']
)
self.__entrys[name]['entry'].place(x=x, y=y, height=height, width=width)
def clear_entry(self,name):
self.__entrys[name]['entry'].delete(0,'end')
def entry_get(self,name):
return self.__entrys[name]['entry'].get()
def set_entry_text(self,name,str):
self.__entrys[name]['strvar'].set(str)
@property
def entrynum(self):
return self.__buttonnum
def entrys(self, name):
return self.__entrys[name]['entry']
anchor = (20,20)
def func1():
top.clear_entry('en1')
top.clear_text('txt1')
def func2():
top.clear_text('txt1')
n = int(top.entry_get('en2'))
average = int(top.entry_get('en1'))
num = int(top.entry_get('en3'))
up = average + n
down = average - n
a = [None] * num
i = 0
b = 0
for x in a:
a[i] = random.randint(down, up)
i += 1
while True:
a[1:] = a[0:num - 1]
a[0] = random.randint(down, up)
for x in a:
b = b + x
if (b // num == average and b % num == 0):
top.text_insert('txt1',str=str(a))
break
b = 0
top = app('800x500')
top.create_label('l1',x=anchor[0],y=anchor[1],width=100,height=35,bg='yellow')
top.create_label('l2',x=anchor[0],y=anchor[1]+35,width=100,height=35)
top.create_label('l3',x=anchor[0],y=anchor[1]+70,width=100,height=35)
top.create_label('l4',x=anchor[0]+200,y=anchor[1],width=250,height=35,bg='yellow')
top.create_label('l5',x=anchor[0],y=anchor[1]+105,width=100,height=35)
top.create_entry('en1',x=anchor[0]+100,y=anchor[1]+35,width=100,height=35)
top.create_entry('en2',x=anchor[0]+100,y=anchor[1]+70,width=100,height=35)
top.create_entry('en3',x=anchor[0]+100,y=anchor[1]+105,width=100,height=35)
top.create_button('bt1',x=anchor[0]+100,y=anchor[1],width=100,height=35,command=func1)
top.create_button('bt2',x=anchor[0]+200,y=anchor[1]+35,width=250,height=105,command=func2)
top.create_text('txt1',x=anchor[0],y=anchor[1]+140,width=450,height=200,bg='white')
top.set_label('l1','基本操作')
top.set_label('l2','均分')
top.set_label('l3','n')
top.set_label('l4','生成的成绩范围:均分+-n')
top.set_label('l5','生成数量')
top.set_button_text('bt1','清空')
top.set_button_text('bt2','generate')
top.set_entry_text('en1','')
top.set_entry_text('en2','')
top.set_entry_text('en1','')
top.set_entry_text('en3','')
mainloop()