pyinstaller 打包后的程式執行時,所有的輸出資訊都是顯示在黑色的CMD框內的,現在想把這些輸出資訊都顯示在GUI 文本框里面,這樣打包后就可以取消CMD黑色視窗了,所有進度以及報錯資訊都顯示到GUI文本框內,求大神指點指點下。
比如說我點擊第一步資料準備后,程式自動查詢SQL,后臺會顯示查詢到的資料資訊,這個資訊需要輸出到這個GUI文本框內顯示,其他的第二步,第三步等依此類推。因為程式中會有一些print()陳述句列印,也需要實時顯示在文本框里。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
"""
from __future__ import print_function
from tkinter import *
import threading
from func import wt_process as wp
from func import cx_process as cp
from func import prepare_date as pd
from func import creat_init as ci
from tkinter import messagebox
from tools import globVal
import tkinter as tk
import ctypes,sys
import logging
from logging import handlers
COMM_DICT, DB2_DICT, BK_DB2_DICT, DRTP_DICT, SPX_DICT = globVal.get_val()
def init_threading():
# 將函式打包到執行緒
if (v1.get() == -1):
messagebox.showinfo(title='未選擇DB2', message='您還未選擇主庫還是備庫,請先選擇!!!')
else:
db2_info = ALL_DB2[v1.get()]
db2_ip = db2_info[2]
db2_port = db2_info[4]
gui_uid = e1.get()
gui_pass = e2.get()
t = threading.Thread(target=ci.creat_init,args=(gui_uid,gui_pass,db2_ip,db2_port))
t.setDaemon(True)
t.start()
def data_threading():
# 將函式打包到執行緒
if (v1.get() == -1):
messagebox.showinfo(title='未選擇DB2', message='您還未選擇主庫還是備庫,請先選擇!!!')
else:
db2_info = ALL_DB2[v1.get()]
db2_ip = db2_info[2]
db2_port = db2_info[4]
gui_uid = e1.get()
gui_pass = e2.get()
t = threading.Thread(target=pd.prepare_data,args=(gui_uid,gui_pass,db2_ip,db2_port))
t.setDaemon(True)
t.start()
def wt_threading():
# 將函式打包到執行緒
if (v1.get() == -1):
messagebox.showinfo(title='未選擇DB2', message='您還未選擇主庫還是備庫,請先選擇!!!')
else:
db2_info = ALL_DB2[v1.get()]
db2_ip = db2_info[2]
db2_port = db2_info[4]
comp_flag = v.get()
gui_uid = e1.get()
gui_pass = e2.get()
t = threading.Thread(target=wp.wt_process,args=(gui_uid,gui_pass,comp_flag,db2_ip,db2_port))
t.setDaemon(True)
t.start()
def cx_threading():
# 將函式打包到執行緒
if (v1.get() == -1):
messagebox.showinfo(title='未選擇DB2', message='您還未選擇主庫還是備庫,請先選擇!!!')
else:
db2_info = ALL_DB2[v1.get()]
db2_ip = db2_info[2]
db2_port = db2_info[4]
gui_uid = e1.get()
gui_pass = e2.get()
t = threading.Thread(target=cp.cx_process,args=(gui_uid,gui_pass,db2_ip,db2_port))
t.setDaemon(True)
t.start()
def prit():
if v1.get() == 0 :
info = '主庫'
elif v1.get() == 1 :
info = '備庫'
messagebox.showinfo(title=info, message='此時選擇的資料庫是'+info+',請確認當前環境用的是主庫還是備庫')
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if __name__=='__main__':
if is_admin():
global e1, e2, v, v1
root = Tk()
root.geometry('1024x768')
root.minsize(1024,768)
root.maxsize(1024,768)
root.iconbitmap(".\\logo.ico")
Text= tk.Text(root,width = 130,height = 35)
Text.place(x=80,y=280)
ALL_DB2 = {}
ALL_DB2.setdefault(0, []).append('主庫DB2配置,')
ALL_DB2.setdefault(0, []).append('IP:')
ALL_DB2.setdefault(0, []).append(DB2_DICT['host'])
ALL_DB2.setdefault(0, []).append(',PORT:')
ALL_DB2.setdefault(0, []).append(DB2_DICT['port'])
if BK_DB2_DICT['host']:
ALL_DB2.setdefault(1, []).append('備庫DB2配置,')
ALL_DB2.setdefault(1, []).append('IP:')
ALL_DB2.setdefault(1, []).append(BK_DB2_DICT['host'])
ALL_DB2.setdefault(1, []).append(',PORT:')
ALL_DB2.setdefault(1, []).append(BK_DB2_DICT['port'])
#print(ALL_DB2)
Label(root, text='1、顯示文字1。', fg='red',
anchor='center').grid(row=1, sticky=W, columnspan=3)
Label(root, text='2、顯示文字2。', fg='red', anchor='se').grid(row=2, sticky=W, columnspan=3)
Label(root, text='請選擇對應的DB2環境', fg='black').grid(row=3, sticky=E, column=0)
v1 = IntVar()
v1.set(-1)
#v1.set(0)
if len(ALL_DB2) == 1:
v1.set(0)
row_id = 3
for key, value in ALL_DB2.items():
b = Radiobutton(root, text=value, variable=v1, value=https://bbs.csdn.net/topics/key, command=prit).grid(row=row_id, column=1, sticky=W,
columnspan=2)
row_id += 1
Label(root, text='請輸入DB2的用戶名 :').grid(row=5, column=0, sticky=E)
Label(root, text='請輸入DB2的密碼 :').grid(row=6, column=0, sticky=E)
e1 = Entry(root)
e2 = Entry(root, show='*')
e1.grid(row=5, column=1, sticky=W, columnspan=2)
e2.grid(row=6, column=1, sticky=W, columnspan=2)
e1.delete(0, END)
e2.delete(0, END)
e1.insert(0, '*******')
e2.insert(0, '*******')
Button(root, text='第1步:資料準備', command=data_threading).grid(row=14, column=0)
v = IntVar()
Checkbutton(root, text='是否對比資金證券臨時變動', variable=v).grid(row=14, column=1, sticky=W)
Button(root, text='第2步:發起委托', command=wt_threading).grid(row=15, column=0)
Button(root, text='第3步:發起查詢', command=cx_threading).grid(row=16, column=0)
Button(root, text='第4步:生成資料', command=init_threading).grid(row=17, column=0)
Button(root, text='退出', command=root.quit).grid(row=15, column=2, sticky=W, rowspan=2)
root.mainloop()
else:
if sys.version_info[0] == 3:
ctypes.windll.shell32.ShellExecuteW(None, 'runas', sys.executable, __file__, None, 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262658.html
