2017-10-12 48 views
0

我一直在与几个tkinter教程,包括一个文本窗口和一个非常有用的教程,但没有文本窗口。看到这里:https://www.youtube.com/watch?v=oV68QJJUXTU试图添加TK文本窗口为例,导入tkinter混淆

我试图添加一个文本窗口到这个例子,但发现常量END未定义和文本窗口未打开或显示在框架中。我把它归结为进口的差异。使用“from tkinter import *”来定义常量END(它是'结束'),但是使用本教程的方法“import tkinter as tk”,未定义常量END。我定义它来清除错误,当我尝试使用文本窗口窗口永远不会打开(从未出现)在示例中,所以我认为要么必须重写使用import *方法,要么我需要了解如何超过导入为tk差异。

它接口导入为tk可能是更正确的方法,而不是*,所以这是我认为我应该学会这样做的方式。

有什么建议吗?

此代码的工作

from tkinter import * 
..... 

class set_window(Thread): 

    def __init__(self, labelText): 
     Thread.__init__(self) 
     self.labelText = labelText 
     self.labelText.set("Text Window Display") 

     self.T = Text(root, height=40, width=60, bd=10) 
     self.T.grid(row=1, column=0) 
     self.T.focus_set() 
     self.T.insert(END, "Just a text Widget\nin two lines\n") 

但这并不:

import tkinter as tk 

    class StartPage(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Blast it!", font=XLARGE_FONT) 
     label.pack(pady=10, padx=10) 

     label_2 = tk.Label(self, text="Input Text Here", font=LARGE_FONT) 
     label_2.pack(pady=10, padx=10) 

     self.T = tk.Text(self, height=40, width=60, bd=10)   
#  print(type(END)) 
#  input ("Press Enter") 
     self.T.insert(END, "Just a text Widget\nin two lines\n") 
     self.T.insert('end', "Just a text Widget\nin two lines\n") 
     self.T.focus_set() 
+0

使用字符串“end”而不是'END'或'tk.END'。没有理由使用常量。 –

+0

我想我已经找到了一些我的答案。我将“END”更改为“tk.END”,并且我添加了pack语句如下.self.T.pack() –

+0

Hello Bryan。感谢您提供关于“tk.END”的线索。常量END接缝是许多程序员用户在模块中定义的接口。所以我认为这是理由。我在这里黑暗中摸索着。 –

回答

1

如果您想访问END它可当你做from tkinter import *,你必须访问它时tk.END你做import tkinter as tk。或者,您可以简单地使用'end'。另一种解决方案是from tkinter.constants import END

+0

我会说,总是使用引用的方法。这将防止问题无论你如何导入。 –

0

我发现我必须在END常量前缀为tk.END,并在错误时清除。

我发现我不得不在文本窗口插入语句后添加一个PACK语句。页面代码变为:

class StartPage(tk.Frame): 

def __init__(self, parent, controller): 
    tk.Frame.__init__(self, parent) 
    label = tk.Label(self, text="Blast it!", font=XLARGE_FONT) 
    label.pack(pady=10, padx=10) 

    label_2 = tk.Label(self, text="Input Text Here", font=LARGE_FONT) 
    label_2.pack(pady=10, padx=10) 

    self.T = tk.Text(self, height=40, width=60, bd=10)   
    self.T.insert(tk.END, "Just a text Widget\nin two lines\n") 
    self.T.focus_set() 
    self.T.pack() 
+0

当给出准确的信息时,请不要回答你自己的问题。你应该删除这篇文章并接受@mentalita作为正确答案。另外我不认为你需要focus_set()在这里。它在我的代码中看不到有用的用途。 –