TopLevel上的Python 3.6 tk ScrolledText将不会插入

时间:2018-01-31 04:51:21

标签: python python-3.x tkinter pyinstaller

当我使用Pyinstaller编译可执行文件时,我遇到了下面代码的问题。

我正在尝试使用TopLevel打开第二个GUI窗口,向其添加ScrolledText小部件,然后获取ipconfig /all的输出并将其放入ScrolledText。

我将代码剥离到与此问题相关的代码。如果我直接运行python文件,或者在没有--windowed命令pyinstaller --onefile toolbox.py的情况下使用Pyinstaller进行编译,那么一切似乎都有效。

当我使用--windowed pyinstaller --onefile --windowed toolbox.py编译时,TopLevel窗口打开,我收到代码中列出的错误消息,并且ScrolledText小部件为空。

我已确认在txt.insert命令上使用普通字符串确实有效,因此问题似乎与os.popen命令一致。我确实尝试使用subprocess.check_output代替os.popen,但我收到了相同的错误消息。此外,将os.popen命令分配给变量然后在txt.insert中插入变量具有相同的结果。

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkinter import scrolledtext
import os
import sys


def netIPInfo():
    """Open a second window, displays output of ipconfig /all."""
    window2 = Toplevel()
    window2.title("NIC IP Info")
    window2.geometry("663x650")
    txt = scrolledtext.ScrolledText(window2, width=80, height=40)
    txt.pack(expand=1, fill="both")

    try:
        txt.insert(INSERT, os.popen("ipconfig /all").read())  # ISSUE!!
    except:
        e = sys.exc_info()
        messagebox.showinfo("Error", e)  # Error message below
        # {<class 'OSError'}
        # {[WinError 6] The handle is invalid}
        # {<traceback object at 0x02EEB260>}

    txt.configure(state="disabled")

    window2.mainloop()

# Primary GUI Window
window = Tk()
window.title("ProTech QST")
tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab_control.add(tab1, text='Network')
lfr5 = ttk.LabelFrame(tab1, text="Information")
lfr5.pack(fill=X)
btn30 = Button(lfr5, text="NIC IP Info")
btn30.config(width=18, command=netIPInfo)
btn30.grid(column=0, row=1, sticky=W)

tab_control.pack(expand=1, fill="both")

if __name__ == "__main__":
    window.mainloop()

修改

我正在使用代码更多,并发现如果我使用--windowed运行pyinstaller但没有--onefile它可以工作。使用--onefile但不使用--windowed运行pyinstaller也是如此。这是一个问题,不是代码,而是pyinstaller?

0 个答案:

没有答案