2017-10-12 44 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()在這裏。它在我的代碼中看不到有用的用途。 –