zoukankan      html  css  js  c++  java
  • 计算器

    import tkinter as tk
    from tkinter import ttk
    
    import pandas as pd
    from prettytable import PrettyTable
    
    '''号码投注方案计算器'''
    
    # 程序界面
    class AppWindow(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.grid(row=0, column=0, sticky="nsew")
            self.setupUI()
    
        def setupUI(self):
            leftwidth = 5
            rightwidth = 15
            
            
            mainframe = tk.Frame(self)
            mainframe.pack(fill="x")
            
            # 第一行:特码毛赔率
            rowframe1 = tk.Frame(mainframe)
            rowframe1.pack(fill="x", ipadx=3, ipady=3)
    
            self.peilv = tk.DoubleVar()
            self.peilv.set(42)
            tk.Entry(rowframe1, textvariable=self.peilv).pack(side=tk.RIGHT)
            
            tk.Label(rowframe1, text="赔率").pack(side=tk.RIGHT)
    
            
            # 第二行:起始倍数
            rowframe2 = tk.Frame(mainframe)
            rowframe2.pack(fill="x", ipadx=3, ipady=3)
            
            self.start_beishu = tk.IntVar()
            self.start_beishu.set(1)
            tk.Entry(rowframe2, textvariable=self.start_beishu).pack(side=tk.RIGHT)
            
            tk.Label(rowframe2, text="起始倍数").pack(side=tk.RIGHT)
            
            # 第三行:注数
            rowframe3 = tk.Frame(mainframe)
            rowframe3.pack(fill="x", ipadx=3, ipady=3)
            
            self.zhushu = tk.IntVar()
            self.zhushu.set(10)
            tk.Entry(rowframe3, textvariable=self.zhushu).pack(side=tk.RIGHT)
            
            tk.Label(rowframe3, text="注数").pack(side=tk.RIGHT)
            
            # 第四行:最小收益率
            rowframe4 = tk.Frame(mainframe)
            rowframe4.pack(fill="x", ipadx=3, ipady=3)
            
            self.min_shouyilv = tk.DoubleVar()
            self.min_shouyilv.set(0.5)
            tk.Entry(rowframe4, textvariable=self.min_shouyilv).pack(side=tk.RIGHT)
            
            tk.Label(rowframe4, text="最小收益率").pack(side=tk.RIGHT)
            
            
            # 第五行:按钮
            rowframe5 = tk.Frame(mainframe)
            rowframe5.pack(fill="x", ipadx=3, ipady=3)
            ttk.Button(rowframe5, text='确定', command=self.calc).pack(side=tk.RIGHT)
            
        def calc_a_row(self, index, last_beishu, last_cumsumtouru):
            '''根据上期倍数、上期累计投入,计算本期'''
            zhushu, peilv, min_shouyilv = self.zhushu.get(), self.peilv.get(), self.min_shouyilv.get()
            bs = last_beishu
            while True:
                cumsumtouru = last_cumsumtouru + bs * zhushu # 累计投入
                cumsumshouyi = bs * peilv - cumsumtouru # 累计收益
                if cumsumshouyi/cumsumtouru < min_shouyilv:
                    bs += 1
                else:
                    break
            # ['期数','倍数','注数','本期投入','累计投入','本期收益','累计收益','累计收益率']
            return [index+1, bs, zhushu, bs*zhushu, cumsumtouru, round(bs*peilv, 2), round(cumsumshouyi, 2), round(cumsumshouyi/cumsumtouru, 4)]
            
        def calc_n_row(self, n=10):
            '''计算n期'''
            res = []
            for i in range(n):
                if i == 0: 
                    res.append(self.calc_a_row(i, self.start_beishu.get(), 0))
                elif i > 0:
                    res.append(self.calc_a_row(i, res[-1][1], res[-1][4]))
            return res
        
        def calc(self):
            '''倍投计算(用prettytable显示结果)'''
            n = 10
            res = self.calc_n_row(n)
            
            table = PrettyTable(['期数','倍数','注数','本期投入','累计投入','本期收益','累计收益','累计收益率'])
            for i in range(n):
                table.add_row(res[i])
            print(table)
            
        def calc2(self):
            '''倍投计算(用pandas显示结果)'''
            n = 10
            res = self.calc_n_row(n)
            
            df = pd.DataFrame(res, columns=['期数','倍数','注数','本期投入','累计投入','本期收益','累计收益','累计收益率'])
            print(df)
        
    def main():
        root = tk.Tk()
        root.columnconfigure(0, weight=1)
        root.rowconfigure(0, weight=1) # Grid管理器允许通过几个方法来控制组件在容器中的位置。weight选项指出一个行或列的相对缩放比例,针对一个行,如果将weight设为3,那么他将以三倍于weight值为1的比例伸展。默认值是0,表明当用户改变窗口大小时,单元格的大小保持不变。
        #root.geometry('640x360')  # 主窗口大小
        root.resizable(width=False, height=False) # 禁止改变大小
        root.title("计算器")
    
        app = AppWindow(root)
        app.mainloop()
    
    
    if __name__ == "__main__":
        main()
        pass
    
  • 相关阅读:
    PHP编程中一些时间和日期代码调用的实例
    想不显示织梦栏目列表页缩略图就是不显示默认缩略图怎么办
    织梦dede文章增加HTML自定义字段字符被过滤问题
    Dedecms友情链接/uploads/fli<x>nk/不显示正确的图片路径错误
    Dedecms教程:整站调用购物车订单数量简单解决办法
    织梦DedeCMS模板常用的内容统计sql标签代码
    DEDECMS首页loop调用留言本带用户头像的方法
    Python 序列、列表(List)、元组(Tuple)
    Python 字符串常用函数
    Python 运算符
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5686919.html
Copyright © 2011-2022 走看看