Tkinter интерактивный и динамический графический интерфейс - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я пишу небольшой скрипт на Python для моего коллеги, который должен дать основу для его задачи защиты PhD, например, небольшие задания и вопросы, на которые он должен ответить.Сам сценарий должен помочь ему пройти через его испытания и дать эти задания, введения и т. Д.

В настоящее время я использую Tkinter для этой цели.В принципе, я хочу иметь холст / часть экрана, где всплывают текст и вступления, как в примере, показанном ниже.

import Tkinter as tk
import time


global_delay =150
counter = 0
delay = global_delay

def display_text():
  global num_letters 
  global global_text  
  global label   
  text = global_text[counter]
  num_letters = len(text) - 1
  old_text = label.cget("text")+'\n'
  def display():
    global num_letters
    global counter
    global global_delay
    global delay
    if delay == 0:
        user_text = ''
        com_text = '               '
    else:
        user_text = 'user@hlrdbb4 ~ '
        com_text = ''
    print_text = old_text + user_text + str(text[1:len(text) - num_letters])+(num_letters+50-len(text))*' ' + com_text
    label.config(text=print_text)
    label.config(font=("Courier", 30))
    num_letters-=1
    if num_letters>=0:
        label.after(delay, display)
    elif counter<len(global_text)-1:
        counter += 1
        if global_text[counter][0] == 'o':
            delay = 0
        if global_text[counter][0] == 'i':
            delay = global_delay
        label.after(global_delay*10, display_text)

display()


root = tk.Tk()

w, h = root.winfo_screenwidth(), root.winfo_screenheight()

root.geometry("%dx%d+0+0" % (w, h))


root.title("PhD")
label = tk.Label(root, fg="green", bg='black', height=h, width=w, anchor=tk.NW)
label.pack()

global_text=['icd E:\dbb\ ','oChange directory to E:\dbb\ ','iget_PhD.exe','oError file not found','iget_PhD.exe','oError file not found','iget_PhD.exe','oExecuting get_PhD.exe','oHere are your introductions...']
display_text()


root.mainloop()

На другой стороне графического интерфейса должны отображаться соответствующие мини-игры, например,динамически изменяющийся шумовой график, для которого он должен поставить несколько цифр, чтобы увидеть приличный сигнал.Как вы можете видеть, в настоящее время я использую метод after для отображения текста, но я не могу понять, как включить такие игры или как скрипт может ожидать продолжения ввода с клавиатуры.

Может ли кто-нибудь помочь мне здесь немного?

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете привязать ввод с клавиатуры (в данном случае ввод) или кнопку tkinter, чтобы использовать ввод виджета Entry.Вы выполняете функцию с ним (в этом случае обратный вызов).Вы продолжите свою программу, если получите нужный ввод.

import tkinter as tk

root = tk.Tk()
e = tk.Entry(root)
e.pack()

def callback(*args):
    print (e.get())

e.bind("<Return>",callback)
root.mainloop()

Хороший материал для чтения и дополнительные пояснения: Кнопки подтверждения Tkinter и графический интерфейс игры (сращивание (?))

...