Tkinter GUI Проблема приложения с модулем веб-браузера - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать простое приложение GUI, которое открывает программы и веб-сайты с помощью модуля веб-браузера python, но при попытке поиска оно не открывает веб-браузер, однако открывает приложения и может ли кто-нибудь мне помочь? Code :

import tkinter as tk 
import webbrowser
import os

def todo(TODO):
    try:
        if TODO== 'pycharm':
            os.startfile("C:\\Program Files\\JetBrains\\PyCharm Community Edition 2019.3.3\\bin\\pycharm64.exe")
        elif TODO== 'sublime':
            os.startfile("C:\\Program Files\\Sublime Text 3\\sublime_text.exe")
        elif '.py'or '.txt' or '.csv' or '.ppt' in TODO:
            os.open('{}'.format(TODO,os.O_RDWR|os.O_CREAT))
            os.startfile('{}'.format(TODO))
        elif 'search' in TODO:
            url='http://google.com/search?q='+TODO.replace('search','')
            webbrowser.open(url)
        elif 'facebook' in TODO:
            webbrowser.open('https://www.facebook.com/')
        elif 'instagram' in TODO:
            webbrowser.open('https://www.instagram.com/')
        else:
            pass
    except :
        pass

root= tk.Tk()
root.title('To-Do GUI')


entry = tk.Entry(root, font=40, width=35)
entry.grid(row=0,column=0)
entry.focus()

button = tk.Button(root, text="GO", font=40, command=lambda: todo(entry.get()))
button.grid(row=0 ,column=4)

root.mainloop()

1 Ответ

0 голосов
/ 11 февраля 2020

Проблема вовсе не в модуле webbrowser, а в следующей строке:

elif '.py' or '.txt' or '.csv' or '.ppt' in TODO:

, которая всегда True и должна быть записана. Вот простой способ сделать это:

elif '.py' in TODO or '.txt' in TODO or '.csv' in  TODO or '.ppt' in TODO:

Вы не можете увидеть, что на самом деле не так, потому что у вас есть «голые» except: и pass до go вместе с try:, которая скрывает все ошибки, включая те, о которых вы никогда не думали, как синтаксические ошибки. (На самом деле есть еще одна другая проблема, с которой вы еще не сталкивались.)

Чтобы избежать этого, по крайней мере, во время разработки и отладки, я предлагаю вам изменить ее как минимум:

except Exception as exc:
    print('Exception occurred: {}'.format(exc))
    pass

или даже лучше:

except:
    traceback.print_exc()
    pass

, поэтому вы получите некоторое представление о том, почему он не работает, как вы ожидали.

Обновление:

Вот немного более продвинутый способ написания этого elif:

elif any(ext in TODO for ext in ('.py', '.txt', '.csv', '.ppt')):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...