from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from collections import Counter
import pandas as pd
import numpy as np
import random
import sys
class mythread(QThread):
mysingn=pyqtSignal(str,dict)
def __init__(self,total,num):
super(mythread, self).__init__()
self.total=float(total)
self.count=int(num)
def run(self):
day = round(self.total / self.count, 6)
k = 2
lst = []
for i in range(0, self.count - 1):
concat = random.randint(1, 2)
pct = (np.random.randn() / 10.)
if concat == 1:
lst.append(round((day * (1 - pct)), k))
else:
lst.append(round((day * (1 + pct)), k))
sum = 0
for s in lst:
sum += s
lst.append(round(self.total - sum, k))
aa = 0
for s in lst:
aa += s
counts = dict(Counter(lst))
print('垃圾量(吨):' + str(self.total))
print('天数(整数):' + str(self.count))
print('日/天(吨):' + str(day))
tt='总垃圾量(吨):' + str(self.total)+'\n天数:' + str(self.count)+'\n日/天(吨):' + str(day)+'\nMax:' + str(max(lst)) + (',Min:' + str(min(lst)))
print(lst)
print('Max:' + str(max(lst)) + (',Min:' + str(min(lst))))
for k, v in counts.items():
if v>1:
print(str(k) + '---->' + str(v))
tt+='\n'+str(k) + '---->' + str(v)
new_dict={}
for i in range(0,len(lst)):
new_dict[str(i+1)]=lst[i]
self.mysingn.emit(tt,new_dict)
class win(QWidget):
def __init__(self):
super(win, self).__init__()
self.SetupUI()
self.btn1.clicked.connect(self.mytd)
self.btn2.clicked.connect(self.excel)
self.setWindowTitle('月垃圾分配')
def SetupUI(self):
all_win=QVBoxLayout()
hw=QWidget()
hh=QHBoxLayout()
hh.addWidget(self.win1())
hh.addWidget(self.win2())
hh.addWidget(self.win3())
hw.setLayout(hh)
hw1=QWidget()
hh1=QHBoxLayout()
hh1.addWidget(self.win4())
hw1.setLayout(hh1)
all_win.addWidget(hw)
all_win.addWidget(hw1)
self.setLayout(all_win)
def win1(self):
win1=QWidget()
qh1=QVBoxLayout()
qh1.addWidget(QLabel('垃圾量(吨):'))
qh1.addWidget(QLabel('天数(整数)'))
win1.setLayout(qh1)
return win1
def win2(self):
win2=QWidget()
qh2=QVBoxLayout()
self.ql1=QLineEdit()
self.ql2=QLineEdit()
qh2.addWidget(self.ql1)
qh2.addWidget(self.ql2)
win2.setLayout(qh2)
return win2
def win3(self):
win3=QWidget()
qh2=QVBoxLayout()
self.btn1 = QPushButton('提交')
self.btn2 = QPushButton('生成表格')
qh2.addWidget(self.btn1)
qh2.addWidget(self.btn2)
win3.setLayout(qh2)
return win3
def win4(self):
win4=QWidget()
qh2=QHBoxLayout()
self.qle=QTextEdit()
qh2.addWidget(self.qle)
win4.setLayout(qh2)
return win4
def mytd(self):
self.mythread=mythread(self.ql1.text(),self.ql2.text())
self.mythread.mysingn.connect(self.val)
self.mythread.start()
def val(self,ts,dic):
self.qle.setPlainText(ts)
self.dic=dic
def excel(self):
df=pd.DataFrame([self.dic])
df.T.to_excel('c:\Tang.xlsx',index=None,header=False)
QMessageBox.about(self, '提示', '生成表格成功!')
if __name__=='__main__':
app=QApplication(sys.argv)
win=win()
win.show()
sys.exit(app.exec_())