首页 > 解决方案 > 为什么 tkinter GUI 不能使用 pythonw 工作(为了隐藏命令行)?

问题描述

例如,它在 IDLE 中运行并作为 .py 文件运行,但是当我尝试使用 .pyw 扩展名摆脱命令行时,GUI 永远不会打开。我是 tkinter 的新手,所以我不知道一个简单的修复方法,这是我的代码(对不起,它有点草率,只是作为测试):

from pytube import YouTube
import tkinter as tk
import time
from os.path import expanduser

class YTdownloader(tk.Frame):
    def __init__(self, main=None):
        super().__init__(main)
        self.main = main
        self.pack()
        self.create()

    def create(self):
        self.text = tk.Label(self, text='Youtube URL').pack(side='top')
        url = ''
        self.enter = tk.Entry(self, textvariable=url, width=50, justify='center')
        self.enter.pack(side='top')
        self.done = tk.Button(self, text='Enter', command=self.downloader)
        self.done.pack(side='top')

    def downloader(self):
        try:
            vid = YouTube(self.enter.get())
            dv = vid.streams.first()
            dv.download(expanduser("~") + '\downloads')
            self.enter.delete(0, len(self.enter.get()))
            self.enter['fg'] = 'green'
            self.enter.insert(0, 'Success!')
            self.enter['state'] = 'readonly'
            screen.after(2000, self.normalize)
        except Exception as e:
            self.enter.delete(0, len(self.enter.get()))
            self.enter['fg'] = 'red'
            self.enter.insert(0, 'Video not found!')
            self.enter['state'] = 'readonly'
            screen.after(2000, self.normalize)

    def normalize(self):
        self.enter.config(state='normal', fg='black')
        self.enter.delete(0, len(self.enter.get()))



screen = tk.Tk()
screen.geometry("325x275")
screen.resizable(width=False, height=False)
screen.configure(bg='white')
img = tk.PhotoImage(file='rpb.png')
tk.Label(screen, image=img, bd=0).pack(side='top')
screen.title("Youtube MP4 Downloader")
inputS = tk.Frame(height=100, bd=1, relief='sunken')
inputS.pack(fill='x', padx=5, pady=5, side='bottom')
yt = YTdownloader(main=inputS)
yt.mainloop()

标签: pythontkinterpythonw

解决方案


推荐阅读