电话簿下载功能

telephone文件(主文件)

"""
界面的执行文件
"""
import tkinter as tk
from tkinter import ttk
from Telephone.data.t_data_handle import Handle


class fMain():
    def __init__(self):
        self.ph = Handle()

    def pro_handle(self, pro_set, t_output_num, window):
        self.ph.data_handle(pro_set, t_output_num, window)

    def createMain(self, window):
        # 设置窗口的标题
        self.window = window
        window.title("电话号码下载")
        # 设定是否能够改变窗口大小的尺寸
        window.resizable(True, True)
        # 设置窗口背景颜色(#F5F5DC米色)
        window['bg'] = "#F5F5DC"
        # 获取屏幕宽度和高度
        screen_width = window.winfo_screenwidth()
        screen_height = window.winfo_screenheight()
        # 计算窗口在屏幕中间位置坐标
        x = (screen_width - 800) // 2
        y = (screen_height - 500) // 2
        # 设置窗口在屏幕中间位置
        window.geometry("800x500+{}+{}".format(x, y))
        # 创建文本标签
        l_input_num = tk.Label(window, text="Telephone Number", font=28, bg="#F5F5DC")
        l_input_num.place(relx=0.14, rely=0.08)
        l_output_num = tk.Label(window, text="Load Telephone", font=28, bg="#F5F5DC")
        l_output_num.place(relx=0.7, rely=0.08)
        l_pro_num = tk.Label(window, text="进度条:", font=28, bg="#F5F5DC")
        l_pro_num.place(relx=0.04, rely=0.84)
        # 创建文本输入框
        t_input_num = tk.Text(window, width=35, height=20, font=28, relief="groove")
        t_input_num.place(relx=0.05, rely=0.13)
        self.ph.input_msg(t_input_num)
        t_output_num = tk.Text(window, width=35, height=20, font=28, relief="groove")
        t_output_num.place(relx=0.6, rely=0.13)
        # 创建进度条
        pro_set = tk.ttk.Progressbar(window, length=670, mode='determinate', orient=tk.HORIZONTAL)
        pro_set.place(relx=0.12, rely=0.84)
        # 创建按钮
        # 使用lambda表达式实现command命令中函数的传参
        b_active = tk.Button(window, text="执行", height=3, width=10, font=28,
                             command=lambda: self.pro_handle(pro_set, t_output_num, window))
        b_active.place(relx=0.44, rely=0.4)


if __name__ == '__main__':
    fm = fMain()
    window = tk.Tk()
    fm.createMain(window)
    window.mainloop()

 数据库处理文件

sqlConnect和sqlHandle

"""
数据库的连接
"""
import sys
import datetime
import chardet
import cx_Oracle as ora
from datetime import datetime
from chardet import UniversalDetector
import Telephone.common.const.t_ora_db as tod


class dbHelper(object):
    def __init__(self, dt=tod.postgresqlDBT):
        self.__dbType = None
        self.passwd = ""
        self.con = self._getDatabaseConn(dt)
        self.cursor = self.con.cursor()

    def close(self):
        self.cursor.close()
        self.con.close()
        self.__connName = ""

    def _getDatabaseConn(self, dt):
        if dt == tod.lacsDB:
            dbConn = ora.connect(tod.oracle_lacs_db_user_name, tod.oracle_lacs_db_pass_word, tod.oracle_lacs_db)
            self.__dbType = 0
        return dbConn

    def queryScalar(self, sql, *params):
        """
        返回一行第一列
        :param sql:
        :param params:
        :return: 返回一行第一列
        """
        self.cursor.execute(sql, params)
        row = self.cursor.fetchone()
        if row is not None:
            return row[0]
        else:
            return None

    def queryAll(self, sql):
        """
        返回所有記錄
        :param sql:
        :return: 返回表的所有數據,list of tuple,[('aa',bb'),('cc','dd'),('ee','ff')]
        """
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
        except Exception as e:
            print(e)
            raise
        return result

    def commit(self):
        self.con.commit()

    def getDbType(self):
        return self.__dbType

"""
数据库的处理
"""
import Telephone.sql.t_sql as ts


class sqlDel(object):
    def getPageList(self, dbCon):
        sql = ts.sql01[dbCon.getDbType()]
        # 返回所有記錄
        data = dbCon.queryAll(sql)
        return data

 数据处理

"""
窗口数据处理
"""
import time
from Telephone.sql.sqlHandle.t_sql_handle import sqlDel
from Telephone.sql.sqlConnect.t_sql_connect import dbHelper


class Handle(object):
    def data_rows(self):
        rows = []
        dbCon = dbHelper(100000)
        sd = sqlDel()
        try:
            rows = sd.getPageList(dbCon)
        except Exception as e:
            print(e)
        finally:
            dbCon.close()
            del dbCon
        data = []
        for r in rows:
            data.append(r[0])
        return data

    # 第一个输入框里面显示的内容
    def input_msg(self, t_input_num):
        data = self.data_rows()
        for i in range(0, len(data)):
            t_input_num.insert("insert", data[i])
            t_input_num.insert("insert", '\n')

    # 按钮执行的命令后显示的结果
    def data_handle(self, pro_set, t_output_num, window):
        data = self.data_rows()
        pro_set['value'] = 0
        step = int(100 / len(data) + 1)
        for i in range(0, len(data)):
            pro_set['value'] += step
            t_output_num.insert("insert", data[i])
            # 更新UI确保进度条的变化立即反映出来
            window.update_idletasks()
            time.sleep(1)
            t_output_num.insert("insert", '\n')

常量定义 

t_ora_db

"""
oracle的数据连接参数
"""
# 测试的数据库
lacsDB = 100000
oracle_lacs_db = "LACSDB01"
oracle_lacs_db_user_name = "sfcs"
oracle_lacs_db_pass_word = "efactory123"
postgresqlDBT = 300000

 感谢学习和参考,关注不迷路!!!

  • 16
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值