#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 代码可以实现对 SQLite3的数据库查询,可更改数据库名,可修改查询
# 返回结果,如果是文件路径,可以单击打开
import sys, os, re, datetime, time, traceback
import win32timezone
from tkinter import *
import sqlite3
import pyautogui as auto
import ctypes.wintypes
import win32com.client
from pptx import Presentation
import openpyxl
import base64
from PIL import Image, ImageTk
from io import BytesIO
start_r = 0 # 起始行
p_row=8 # 每页显示的行数
DB_FILE = r'H:\FILE_00X.DB' # 默认的数据库文件
disk_Dir=r"H:\\"
class Application(Frame):
'''查询数据库 SQLite3, 并且打开文件'''
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.newWidget()
# 设计查询主界面
def newWidget(self):
global v
#self.config(bg='#434345')
Button(self, text="数据库文件:", font=('黑体', 12)).grid(row=0,column=0, sticky=W )
self.text_db=Text(self, width=40, height=1, bg='lightgray', font=('黑体', 16))
self.text_db.grid(row=1, column=0)
self.text_db.insert(1.0,DB_FILE)
Button(self, text="SQL代码区:", font=('黑体', 12)).grid(row=2,column=0, sticky=W)
self.text_in=Text(self, width=50, height=15, bg='wheat', font=('黑体', 16))
self.text_in.tag_config('red',foreground='red')
self.text_in.tag_config('blue',foreground='blue')
self.text_in.insert(END,
"""SELECT ID,FILENAME,DT,TP,PATH,TM
FROM FILES
WHERE 1=1
-- 查询文件名,或发件人 --""")
self.text_in.insert(END,"\n AND FILENAME LIKE '%%%'",'blue')
self.text_in.insert(END,"""
AND TP LIKE '%%%'
AND PATH LIKE '%%%'
-- 查询文件内容,关键字左右都要有% --""")
self.text_in.insert(END,"\n AND CONTENT LIKE '%%%%%'",'blue')
self.text_in.insert(END,"\n ORDER BY DT DESC")
self.text_in.insert(END,
"""\n --如果你熟悉SQL语句,
--可以把上面的全部删除,自己按要求写 :)
""",'red')
base64_string = 'iVBORw0KGgoAAAAAAAElFTkSuQmCC'
## base64_white = b'iVBORw0KGgoBBOsAAAAASUVORK5CYII='
decoded_image_data = base64.b64decode(base64_string)
sien = ImageTk.PhotoImage(Image.open(BytesIO(decoded_image_data)))
self.text_in.grid(row=3, rowspan=6, column=0)
# 邮件保存 ##########################################################
self.btn01=Button(self, text="邮件保存", font=('黑体', 16), command=self.mail_write)
self.btn01.grid(row=3, column=1, sticky=N )
self.btn02=Button(self, text="查询", font=('黑体', 20), bg='#00aff0', command=self.query)
self.btn02.grid(row=0, column=1, sticky=W )
# 本地文件 ##########################################################
self.btn03=Button(self, text="文件更新", font=('黑体', 16), command=self.disk_check)
self.btn03.grid(row=4, column=1, rowspan=2, sticky=N )
self.label03=Label(self, text="腹有诗书气自华,云鹤孤鸷任天涯...", font=('黑体', 12))
self.label03.grid(row=11, column=0, sticky=SE )
bt2=Label(self,image=sien)
bt2.image=sien
bt2.grid(row=11, column=1)
v = IntVar()
# 根据单选按钮的 value 值来选择相应的选项
v.set(0)
# 使用 variable 参数来关联 IntVar() 的变量 v
rd1 = Radiobutton(self, text="收件箱", fg='blue',font=('微软雅黑','12','bold'),variable=v, value=0)
rd2 = Radiobutton(self, text="所有邮箱", variable=v, value=1)
rd1.grid(row=6, column=1, sticky=S)
rd2.grid(row=7, column=1, sticky=N)
def query(self):
query = self.text_in.get(1.0, END).replace('FROM', ',CONTENT FROM')
print(query)
DB = self.text_db.get(1.0, END)
print(DB)
# 从Text组件获取的文本含有特殊字符,记得用 strip()去除掉
conn = sqlite3.connect(DB.strip())
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()
# 先要将 SQLite3 返回结果改为 List,默认是元组
rows = [list(row) for row in rows]
# 获取返回数据的字段名
cols = [description[0] for description in cursor.description]
conn.close()
# 将CONTENT的结果,匹配到 sheetname或PPT的页码数
# 并且将结果覆盖掉 CONTENT的原始数据
# 先要将 SQLite3 返回结果改为 List,默认是元组
chars1 = re.findall('(?<=CONTENT LIKE \'%).*(?=\')', query)
chars1 = chars1[0].strip('%')
chars1 = chars1.replace('%', '.*')
if chars1 == '': chars1 = '字符为空'
print(chars1)
for i2, descr in enumerate(cursor.description):
#print(descr[0])
if descr[0].upper() == 'CONTENT': content_i = i2
if descr[0].upper() == 'TP': TP_i = i2
print(content_i, TP_i)
for i1, row in enumerate(rows):
#print(rows[i1][i2])
if row[TP_i] == 'XLSX':
final = rows[i1][content_i].replace('SN:', 'ÿ').replace('\n', '')
chars_result = re.findall('ÿ[^ÿ:]*:(?=[^ÿ]*{})'.format(chars1), final, 2)
pos_name = ', '.join(chars_result)
#print(rows[i1][content_i])
rows[i1][content_i] = pos_name.replace('ÿ', 'SN:')
if row[TP_i] == 'PPTX':
final = rows[i1][content_i].replace('PG:', 'ÿ').replace('\n', '')
chars_result = re.findall('ÿ[^ÿ:]*:(?=[^ÿ]*{})'.format(chars1), final, 2)
pos_name = ', '.join(chars_result)
#print(rows[i1][content_i])
rows[i1][content_i] = pos_name.replace('ÿ', 'PG:')
if row[TP_i] == 'MSG':
rows[i1][content_i] = 'NA'
global start_r
start_r = 0
self.show_result(cols, rows)
def open_F(self, event):
print('ok')
bg = event.widget.cget('bg')
file = event.widget.cget('text').replace('\\\\','\\')
if bg == 'white':
os.startfile(file)
def show_result(self, cols, rows):
geo_str='1500x600+200+200'
if wd > 2000: geo_str='2000x750+200+200'
result_window = Toplevel()
result_window.title('查询结果')
result_window.geometry(geo_str)
start_r = 0
#result_window.attributes('-topmost', True)
# 局部函数, 销毁所有的 Label, 重写下一批, 背景色为 gold的标题行不销毁 ##########################
def dest(rows, fx):
global start_r
children = result_window.winfo_children()
start_r += fx*p_row
rows_all = len(rows)
if start_r >= rows_all: start_r = 0
if start_r < 0: start_r = int(rows_all/p_row-0.01)*p_row
LB['text'] = '返回数:'+ str(start_r) + ' / ' + str((len(rows)))
for ch in children:
if isinstance(ch, Label) and ch.cget('bg') != 'gold':
ch.destroy()
write_some(rows, fx)
# 局部函数, 每次写固定行数的返回结果, 到尾巴了从头开始 ##########################
def write_some(rows, fx):
global start_r
rows_all = len(rows)
for j, row in enumerate(rows[start_r:start_r+p_row if start_r+p_row<rows_all else rows_all]):
for i, cell in enumerate(row):
#ht = int(text_wd_max[i]/140+1)
#print(text_wd_max[i], ht)
lb = Label(result_window, text=cell, anchor=W, relief=RIDGE,
width=text_wd[i], height=3, wraplength=text_wd[i]*7)
lb.grid(row=j+2, column=i)
if i == 4:
lb.config(bg='white', fg='blue')
# 绑定事件, 判断是否可以打开文件
lb.bind_class('Label', '<Button-1>', self.open_F)
# 确认字符数量,以便设置Label宽度,字符最多为50个,<50则取所有行的最大值
text_wd=[10 for i in range(len(cols))]
text_wd_max=[15 for i in range(len(cols))]
for j, row in enumerate(rows):
for i, cell in enumerate(row):
if len(str(cell).strip()) > text_wd[i]:
text_wd[i] = len(str(cell).strip()) if len(str(cell).strip()) < 70 else 70
if len(str(cell)) > text_wd_max[i]:
text_wd_max[i] = len(str(cell).strip())
print(text_wd)
# 显示标题行,行高2个字符,wraplength的像素值 = 字符数 * 7
for i, col in enumerate(cols):
Label(result_window, text=col, anchor=W, relief=RIDGE,
width=text_wd[i], bg='gold', height=1, wraplength=text_wd[i]*7).grid(row=1, column=i)
# 显示结果行
write_some(rows, 1)
# 调用销毁和重写下一批的功能, btn02 是销毁退出 Toplevel
btn01 = Button(result_window, text='下一页', font=('黑体', 15), command=lambda:dest(rows, 1))
btn01.grid(row=0, column=1)
btn03 = Button(result_window, text='上', font=('黑体', 15), command=lambda:dest(rows, -1))
btn03.grid(row=0, column=0)
btn02 = Button(result_window, text='退出关闭', font=('黑体', 15), command=lambda:result_window.destroy())
btn02.grid(row=0, column=2, padx=2)
LB = Label(result_window, text='返回数:'+str(len(rows)), bg='gold', font=('黑体', 15))
LB.grid(row=0, column=4, sticky=W )
def mail_write(self):
# 初始全局变量,定义数据库 ##########################################################
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
cnt = 0
cnt_ok=0
rep0 = 0
chk_Dir = r"H:\MAIL"
all_path = chk_Dir
file_cnt=0
global v
#检查文件夹是否存在,否则创建
if os.path.exists(chk_Dir) is False:
os.mkdir(chk_Dir)
os.mkdir(chk_Dir+r'\send')
else:
print('文件夹已经存在......很OK')
wd = auto.size().width
geo_str='700x500+600+200'
if wd > 2000: geo_str='900x650+600+200'
result_window = Toplevel()
result_window.title('运行中......看到结果提示后,请关闭此窗口...')
result_window.geometry(geo_str)
frame = Frame(result_window)
frame.pack(side='left', fill='both', expand=True)
text = Text(frame, width=40, font=('黑体', 16), fg='#00fd35', bg='#434345')
text.pack(side='left', fill='both', expand=True)
scrollbar1 = Scrollbar(frame, command=text.yview)
scrollbar1.pack(side='left', fill='y')
text.config(yscrollcommand=scrollbar1.set)
# 获取所有根级文件夹
root_folders = outlook.Folders
disk_set = set()
for root, dirs, files in os.walk(chk_Dir,topdown=False):
if root.upper().find("Welink_Files")>-1:
continue
for file in files:
f1 = os.path.join(root, file)
disk_set.add(f1)
def folder_all(folder0,item0):
for f in folder0.Folders:
check_v = 0
try:
if f.Restrict("[FOLDER.VISIBLE=true]"): check_v = 1
except:
pass
if f.Folders.Count>0 and check_v == 1:
folder_all(f,item0)
item0.append(f.Items)
file_cnt = 0
vv = v.get()
# 遍历每一个根级文件夹及其子文件夹
for folder in root_folders:
for sub_folder in folder.Folders:
item0=[]
#if cnt_ok >2: exit()
text.insert(END, folder.Name+'--'+sub_folder.Name+ '\n')
text.update()
if (folder.Name.find('.com') > -1 and sub_folder.Name not in ('已删除邮件','Deleted Items')) if vv==0 else \
(sub_folder.Name.find('删除')==-1 or sub_folder.Name.upper().find('DELETE')==-1):
item0.append(sub_folder.Items)
if sub_folder.Folders.Count>0:
folder_all(sub_folder,item0)
print('xxxxxxxxxxxxxxxxxxxxxxxx',len(item0))
for mm in item0:
try: mm.Sort("[ReceivedTime]",True)
except: pass
rep0 = 0
#Michael.Liu@sienidm.com
for mail in mm:
#break
cnt+=1
try:
sender=mail.SenderName
except:
continue
save_folder_path=all_path
if sub_folder.Name in ('202203','已发送邮件','已发送','Send Items'):
sender=''
save_folder_path=all_path+r'\send'
## if sub_folder.Name=='收件箱':
## save_folder_path=all_path
#sender=''
# 获取邮件主题,以此做文件名,故需要去除文件名的非法字符
mail_subject = re.sub(r'[<>/\|:"*?]','_',mail.Subject.replace(' ',''))
# 获取邮件创建时间
mail_date = mail.CreationTime.strftime("%Y-%m-%d %H-%M-%S")
# 转换为时间戳整数
date2=time.mktime(mail.CreationTime.timetuple())
# 构造保存文件路径
save_file_path = os.path.join(save_folder_path,
f'{sender}_{mail_subject}={mail_date}.msg')
file = f'{sender}_{mail_subject}={mail_date}.msg'
f1 = save_file_path
#print(dir(mail))
if save_file_path in disk_set:
if cnt%10 == 0:
text.insert(END, sub_folder.Name+'.....'+str(cnt)+'......Existsed........'+'\n')
text.see(END)
text.update()
rep0 += 1
## if rep0 > 20:break
continue
#print(sub_folder.Name+'.....'+str(cnt)+'::'+save_file_path)
text.insert(END, sub_folder.Name+'.....'+str(cnt)+'::'+save_file_path+'\n')
text.see(END)
text.update()
# 将邮件保存到指定路径
try:
mail.SaveAs(save_file_path)
os.utime(save_file_path,(date2,date2))
cnt_ok+=1
except:
print(Exception)
#print(str(cnt_ok)+' 封邮件已保存')
text.insert(END, str(cnt_ok)+' 封邮件已保存, end......'+'\n')
text.see(END)
text.update()
self.extra(text)
def extra(self, text):
file_cnt=0
CNT0 = 0
file_size = 0
chk_Dir=r"H:\MAIL"
start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
outlook = win32com.client.Dispatch("Outlook.Application")
file_no=['START','START','\n']
time.sleep(0.2)
text.insert(END, '\n\n\n\n开始写数据库................................\n\n'+'\n')
text.see(END)
text.update()
#if DB_FILE + chk_Dir not in ('D:\FILE_03.DBH:\MAIL', 'D:\FILE_MFG.DBS:\02_MFG'): exit()
##def extract_text_from_msg(filepath):
## with open(filepath, 'rb') as f:
## msg = Message(f)
## msg_sender = msg.sender
## msg_subject = msg.subject
## msg_txt = ""
## for chunk in msg.body:
## if isinstance(chunk, bytes):
## msg_txt += chunk.decode('gb18030', errors='ignore')
## else:
## msg_txt += str(chunk)
## return msg_sender, msg_subject, msg_txt
# 定义数据库表结构和连接
conn = sqlite3.connect(DB_FILE,check_same_thread=False)
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS FILES (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT,
dt TEXT,
TP TEXT,
path TEXT,
tm TEXT,
SIZE INTEGER,
content TEXT
)
''')
# 读取数据库中的 MSG 文件,生产集合,以便判断,如果已经存在就不上传了
c.execute("SELECT PATH FROM FILES WHERE 1=1 ")
results = c.fetchall()
hist_set = set([result[0] for result in results])
disk_set = set()
for root, dirs, files in os.walk(chk_Dir,topdown=False):
if root.upper().find("Welink_Files")>-1:
continue
for file in files:
f1 = os.path.join(root, file)
disk_set.add(f1)
diff_set=disk_set-hist_set
for f1 in diff_set:
file = os.path.basename(f1)
file_size += os.path.getsize(f1)
#f1 = f1.replace('\\._','\\')
ext = os.path.splitext(file)[-1]
ext = ext.upper()
CNT0 += 1
# 解析 MSG 文件内容######################################################
content=''
if file.find('~$') == -1 and ext == '.MSG' and (0 if f1 in hist_set else 1):
DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))
tm1=time.time()
tp='MSG'
file_cnt+=1
#print(str(file_cnt)+"...发现修改文件:", f1)
text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')
text.see(END)
text.update()
# 解析 MSG 文件内容
try:
msg = outlook.CreateItemFromTemplate(f1)
content = msg.Body
if content == '': content = '正文是空'
except:
err=traceback.format_exc()
print(Exception)
file_no.append(f1+'\n'+err+'\n')
pass
if content == '': continue
# 插入记录到数据库
#print(content.replace('\n\r', ''))
tm2=time.time()
tm3=str(round(tm2-tm1,3))
size=len(content)
c.execute('INSERT INTO files (dt,tp,filename, path, tm,size,content) VALUES (?,? ,?,?, ?,?, ?)',
(DT_TM,tp,file, f1,tm3,size, content))
conn.commit()
#print('ok......')
end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
c.close()
conn.close()
#print('end.....................................')
#print('硬盘邮件总大小......' + str(int(file_size/1000/1000)), 'M')
text.insert(END, '\n\n\n\n\nend.....................................'+'\n')
text.insert(END, f'end........上传了....{file_cnt} 封邮件.........'+'\n')
text.insert(END, '硬盘邮件总大小......' + str(int(file_size/1000/1000))+ 'M'+'\n')
text.see(END)
text.update()
def disk_check(self):
tm00 = time.time()
file_cnt = 0
file_all = 0
start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
file_no=['START','START','\n']
wd = auto.size().width
geo_str='700x500+600+200'
if wd > 2000: geo_str='900x650+600+200'
result_window = Toplevel()
result_window.title('运行中......看到结果提示后,请关闭此窗口...')
result_window.geometry(geo_str)
frame = Frame(result_window)
frame.pack(side='left', fill='both', expand=True)
text = Text(frame, width=40, font=('黑体', 16), fg='#00fd35', bg='#434345')
text.pack(side='left', fill='both', expand=True)
scrollbar1 = Scrollbar(frame, command=text.yview)
scrollbar1.pack(side='left', fill='y')
text.config(yscrollcommand=scrollbar1.set)
# 定义数据库表结构和连接
conn = sqlite3.connect(DB_FILE,check_same_thread=False)
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS FILES (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT,
dt TEXT,
TP TEXT,
path TEXT,
tm TEXT,
SIZE INTEGER,
content TEXT
)
''')
c.execute('SELECT PATH FROM FILES')
results = c.fetchall()
file_hist = set(list(r[0] for r in results))
file_new = set()
for root, dirs, files in os.walk(disk_Dir,topdown=False):
if root.upper().find("Welink_Files")>-1:
continue
for file in files:
f1 = os.path.join(root, file)
#f1 = f1.replace('\\._','\\')
ext = os.path.splitext(file)[-1]
ext = ext.upper()
#print(f1,ext)
# 解析 XLSX 文件内容######################################################
content=''
if file.find('~$') == -1 and ext == '.XLSX':
size=int(os.path.getsize(f1)/1000/1000)
#ipdb.set_trace()
if size > 3:
#file_no.append(f1+'\n文件过大 '+str(size)+' M,跳过......\n')
text.insert(END, f1+'\n文件过大 '+str(size)+' M,跳过......\n'+'\n')
text.see(END)
text.update()
continue
file_all += 1
if f1 in file_hist:
#print(root + '\nExist..........' + str(file_all))
text.insert(END, root + '\nExist..........' + str(file_all)+'\n')
text.see(END)
text.update()
file_new.add(f1)
continue
DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))
tm1=time.time()
tp='XLSX'
file_cnt+=1
#print(str(file_cnt)+"...发现修改文件:", f1)
text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')
text.see(END)
text.update()
# 解析xlxs文件内容
# 打开Excel文件
try:
workbook = openpyxl.load_workbook(r'{}'.format(f1))
file_new.add(f1)
except:
time.sleep(3)
try:
workbook = openpyxl.load_workbook(r'{}'.format(f1))
file_new.add(f1)
except:
#print(Exception)
text.insert(END, str(Exception)+'\n')
text.see(END)
text.update()
err=traceback.format_exc()
file_no.append(f1+'\n'+err+'\n')
c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',
(DT_TM,tp,file, f1,0,0, '打开出错'))
conn.commit()
continue
# 获取所有非空白的工作表名
try:
sheet_names = [name for name in workbook.sheetnames if workbook[name].max_column > 0 and workbook[name].max_row > 0]
except:
text.insert(END, str(Exception)+'\n')
text.see(END)
text.update()
err=traceback.format_exc()
file_no.append(f1+'\n'+err+'\n')
continue
# 遍历每个工作表
for sheet_name in sheet_names:
# 获取工作表对象
sheet = workbook[sheet_name]
# 获取最大行数和列数
max_row = sheet.max_row
max_column = sheet.max_column
# 只取前100行的内容
if max_row > 30:
max_row = 30
if max_column > 20:
max_column = 20
# 遍历每行和每列,获取单元格内容
# 每个sheet把表名加在前面 SN:sheetname:
content = content + ' SN:{}:'.format(sheet_name)
for row in range(1, max_row+1):
for column in range(1, max_column+1):
# 获取单元格内容
value=sheet.cell(row=row, column=column).value
if value is None:
continue
if str(value).find('=')>-1:
continue
if str(value).isnumeric():
continue
content = content + ',' + str(value)
# 插入记录到数据库
#print(content)
tm2=time.time()
tm3=str(round(tm2-tm1,3))
size=len(content)
c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',
(DT_TM,tp,file, f1,tm3,size, content))
conn.commit()
# 解析 PPTX 文件内容######################################################
content=''
if file.find('~$') == -1 and ext == '.PPTX':
file_all += 1
if f1 in file_hist:
#print(root + '\nExist..........' + str(file_all))
text.insert(END, root + '\nExist..........' + str(file_all)+'\n')
text.see(END)
text.update()
file_new.add(f1)
continue
DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))
tm1=time.time()
tp='PPTX'
file_cnt+=1
#print(str(file_cnt)+"...发现修改文件:", f1)
text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')
text.see(END)
text.update()
# 解析pptx文件内容
try:
prs = Presentation(f1)
file_new.add(f1)
except:
time.sleep(3)
try:
prs = Presentation(f1)
file_new.add(f1)
except:
text.insert(END, str(Exception)+'\n')
text.see(END)
text.update()
err=traceback.format_exc()
file_no.append(f1+'\n'+err+'\n')
c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',
(DT_TM,tp,file, f1,0,0, '打开出错'))
conn.commit()
continue
for pg, slide in enumerate(prs.slides):
content += '\nPG:{}:'.format(str(pg))
content += ','.join(paragraph.text for shape in slide.shapes if shape.has_text_frame
for paragraph in shape.text_frame.paragraphs)
# 插入记录到数据库
#print(content)
tm2=time.time()
tm3=str(round(tm2-tm1,3))
size=len(content)
c.execute('INSERT INTO files (dt,tp,filename, path, tm,size,content) VALUES (?,? ,?,?, ?,?, ?)',
(DT_TM,tp,file, f1,tm3,size, content))
conn.commit()
end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
conn.close()
text.insert(END, '\n\n\n\n\nend.....................................'+'\n')
text.insert(END, str(time.time()-tm00)+'\n')
text.insert(END, f'共完成 ...{file_cnt}...个文件,存到数据库,请关闭此窗口'+'\n')
text.see(END)
text.update()
if __name__ == '__main__':
user = os.getlogin()
if user.upper() not in ['刘晓勇','Q01077']:
auto.confirm('您还没有授权测试,请联系他!!!')
sys.exit()
wd = auto.size().width
geo_str='650x500+600+200'
if wd > 2000: geo_str='850x600+600+200'
root = Tk()
root.title('文件_邮件管理_查询界面')
root.geometry(geo_str)
app = Application(master=root)
root.mainloop()
|