Вывести окно интерфейса Python на передний план? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь использовать один из графических модулей 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 ]

0 голосов
/ 09 октября 2018

Вы можете сделать это довольно легко, используя 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()

Using 2 input windows

Using 2 input windows

Using a custom GUI

0 голосов
/ 27 июня 2018

Модуль simpledialog создает новое окно Toplevel, которое вы хотите открыть, а не корневое окно.

simpledialog работает лучше всего, когда у вас уже запущен графический интерфейс tkinter. Я думаю, вам было бы намного лучше с easygui, поскольку он на самом деле использует экземпляр tkinter 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)

или просто создайте свой собственный диалог.

...