Par*_*nks 2 tkinter pyinstaller python-3.x
我创建了一个python 3.6脚本来执行一些数据转换并tkinter用于 GUI(文件夹选择和其他选项)。
我已exe使用pyinstaller& 将其转换为文件,希望其他用户(未安装 python)能够使用该工具。
然而,当我打开exe,它会打开一个CMD window足见日志通常的显示python console。
我想将其重定向到我的窗口本身中的text box或- 而不是在单击时打开一个新的 CMD 窗口。frametkinter
import tkinter as tk
from tkinter import filedialog as fd
def browse():
directory=fd.askdirectory()
print ('The selected directory is: ', directory)
def convert():
# perform file manipulation
print ("Files converted")
window = tk.Tk()
window.title("Title")
label=tk.Label(window,text="Instructions")
label.pack()
browseButton=tk.Button(window,text="Browse Folder", command=browse)
browseButton.pack(pady=10)
runButton=tk.Button(window,text="Convert files", command=convert)
runButton.pack(pady=10)
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
然后我将文件转换为exe使用pyinstaller
> pyinstaller --onefile TkinterGUI_test.py
Run Code Online (Sandbox Code Playgroud)
我在 stackoverflow 上看到了很多相关但不符合我的要求的帖子。任何帮助将不胜感激。谢谢!:)
要隐藏控制台,您需要将其添加--noconsole到您的 pyinstaller 命令中。
为了重定向您的打印输出,您可以使用以下内容:
import tkinter as tk
import sys
class PrintLogger(): # create file like object
def __init__(self, textbox): # pass reference to text widget
self.textbox = textbox # keep ref
def write(self, text):
self.textbox.insert(tk.END, text) # write text to textbox
# could also scroll to end of textbox here to make sure always visible
def flush(self): # needed for file like object
pass
if __name__ == '__main__':
def do_something():
print('i did something')
root.after(1000, do_something)
root = tk.Tk()
t = tk.Text()
t.pack()
# create instance of file like object
pl = PrintLogger(t)
# replace sys.stdout with our object
sys.stdout = pl
root.after(1000, do_something)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
因为打印语句通过替换我们在文本框中得到的输出来将其输出定向到 sys.stdout,这意味着print插入换行符以及它通常在终端中执行的任何其他操作。
| 归档时间: |
|
| 查看次数: |
7251 次 |
| 最近记录: |