Вывести окно интерфейса Python на передний план?
Я пытаюсь использовать один из графических модулей Python для получения имени пользователя и пароля в Twitter:
Вот моя первая попытка (с помощью easygui):
import easygui
username = easygui.enterbox("Enter your Twitter username")
password = easygui.passwordbox("Enter your Twitter password")
Вот моя вторая попытка (с использованием tkinter):
import tkinter as tk
from tkinter import simpledialog
application_window = tk.Tk()
application_window.attributes("-topmost", True)
username = simpledialog.askstring("Input", "What is your Twitter username?")
password = simpledialog.askstring("Input", "What is your Twitter password?", show="*")
application_window.destroy()
В настоящее время ни один графический интерфейс не отображается автоматически. Вместо этого на панели задач Windows появляется значок Python, и мне нужно щелкнуть значок, чтобы отобразить графический интерфейс. Есть ли какой-нибудь программный способ сделать графический интерфейс автоматически всплывающим? Или, может быть, есть другой модуль, который я могу использовать для достижения этой цели?
2 ответа
Модуль simpledialog создает новое окно Toplevel, которое вы хотите открыть, а не корневое окно.
simpledialog
лучше всего работает, когда у вас уже запущен графический интерфейс tkinter. Я думаю, тебе было бы намного лучше с easygui
, поскольку он на самом деле использует экземпляр Tk inter Tk:
import easygui
fieldNames = ["Username", "Password"]
values = easygui.multpasswordbox("Enter Twitter information", "Input", fieldNames)
if values:
username, password = values
else:
# user pushed "Cancel", the esc key, or Xed out the window
username, password = None, None
print(username, password)
Если это не работает, у easygui есть ловушка, чтобы использовать самый верхний трюк:
import easygui
fieldNames = ["Username", "Password"]
mb = easygui.multpasswordbox("Enter Twitter information", "Input", fieldNames, run=False)
mb.ui.boxRoot.attributes("-topmost", True)
mb.run()
if mb.values:
username, password = mb.values
else:
# user pushed "Cancel", the esc key, or Xed out the window
username, password = None, None
print(username, password)
или просто сделайте свой собственный диалог.
Вы можете сделать это довольно легко, используя PySimpleGUI. Есть несколько способов. Одним из них является встроенная функция PopupGetText. Это создаст 2 окна, одно для имени пользователя, одно для пароля. Или вы можете создать свой собственный макет, который запрашивает оба в одном окне.
import PySimpleGUI as sg
username = sg.PopupGetText('Enter your username')
password = sg.PopupGetText('Entery your password', password_char='*')
layout = [[sg.Text('Username'), sg.Input()],
[sg.Text('Password'), sg.Input(password_char='*')],
[sg.OK()]]
button, (username, password) = sg.Window('Login').Layout(layout).Read()