Tkinter交互式和动态GUI

时间:2018-12-13 07:46:13

标签: python user-interface tkinter python-2.x

我目前正在为我的一位同事编写一个Python脚本,应该为他的博士防御挑战提供框架,例如他必须回答的小任务和问题。剧本本身应该指导他克服挑战,并提供任务,简介等。

我目前正在为此目的使用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()

GUI的另一面应显示相应的迷你游戏,例如动态变化的噪声图,他必须输入一些数字才能看到不错的信号。如您所见,我目前正在使用后方法来显示文本,但我不知道如何合并此类游戏或脚本如何等待其(键盘)输入继续。

有人可以帮我一下吗?

1 个答案:

答案 0 :(得分:0)

您可以绑定键盘输入(在这种情况下为enter)或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 Confirmation buttons and game GUI (splice(?))