我正在学习Python& Tkinter的。我对他们两个都很陌生。
我试图为Raspberry Pi制作一个Python应用程序,模仿来自Fallout 4的PipBoy 3000 Mark IV。
目前,我正在制作该程序的介绍动画部分,该部分只是简单地为一个文字动画一次一个字符。
我在Linux(ChromeOS via Crouton)和Windows上使用Python 3.2。我已经完成了几个tkinter教程,但我必须在这里遗漏一些东西。如果有人能指出我正确的方向,我会很感激。
main.py:
from tkinter import *
from tkinter import ttk
from introAnimation import *
# FUNCTIONS
def setup_root():
global root
root = Tk()
root.title("PipBoy 3000 Mark IV")
root.geometry("800x480")
root.bind("<Escape>", lambda e: e.widget.quit())
def setup_intro():
global introframe
introframe = ttk.Frame(root, style='pip.TFrame', padding="3 3 12 12")
print('introframe created.')
introframe.grid(column=0, row=0, sticky=(N, W, E, S))
introframe.columnconfigure(0, weight=1)
introframe.rowconfigure(0, weight=1)
ttk.Label(introframe, width=200, textvariable=introHeading).grid(column=4, row=1, sticky=(W, E))
global dynamic_label
dynamic_label = ttk.Label(introframe, style='pip.TLabel', textvariable=temp_label).grid(column=1, row=2)
print('dynamnic_label created')
def print_label_slowly(message):
array = list(message)
print('print_label_slowly was called')
for char in array:
print("in loop, char: %s" % char)
text = temp_label.get()
text += char
introframe.after(600)
temp_label.set(text)
introframe.update_idletasks()
# MAIN
if __name__ == "__main__":
# set up frame style
pip_frame = ttk.Style()
pip_frame.configure('pip.TLabel', background='black', foreground='green')
pip_frame.configure('pip.TFrame', background='black', foreground='green')
# set up root geometry
setup_root()
# set up intro
temp_label = StringVar()
setup_intro()
introframe.focus()
for postMessage in introAnimArray:
print_label_slowly(postMessage)
root.update_idletasks()
# print_label_slowly('test')
root.mainloop()
部分字符串来自IntroAnimation.py IntroAnimation.py:
introAnimArray = [
"LOADER V1.1",
"EXEC VERSION 41.10",
"64K RAM SYSTEM",
"38911 BYTES FREE",
"NO HOLOTAPE FOUND",
"LOAD ROM(1). DEITRIX 303"
]
introHeading = "*************** PIP-OS(R) V7.1.0.8 ***************"
initialiseString = 'INITIATING'
问题:
我创造的风格似乎并没有应用。
窗口布局类型最终成为两个独立的窗口,一个很大,一个小的时候,我预计内插框会最终作为一种层坐在根上。
在标签更新时看不到标签,但我可以从我的打印命令中看到脚本正在正确处理数据。
答案 0 :(得分:1)
代码太多,问题太多。这应该是三个单独的问题,每个问题都有一小段代码。阅读并采取此SO help page。
让我们对标有'tk'的无关小窗口提出这个问题。你假设它与introframe
有关,但你不知道。如果您已经逐步开发了代码,那么在您进行测试时,您会注意到哪个添加使其显示出来。鉴于你拥有的东西,删除直到问题消失。
这就是我所做的。我在setup_root
和root.mainloop
之间注释了所有内容。仍然有两个窗口。删除更多,事实证明,如果没有一个窗口,style()会创建一个空白tk
窗口。如果你在main子句中使用那一行运行代码,你会立即看到问题。首先创建root,然后问题就消失了。
我用了3.5。如果可以使用RPy,请使用比3.2更新的东西。