2014-06-30 82 views
1

我不明白爲什麼我的代碼中rackGUI.py下的輸入框是靜態的/不會允許輸入任何內容。我相信所有Entry對象都正確實例化。我將文本變量指定爲StringVar()的實例。我的直覺告訴我,問題在於create_button實例化中的命令參數,但我不確定爲什麼。我想通過設置command = lambda:function該函數不會被調用。tkinter:無法進入條目小部件

單擊菜單中的'New'main.py成功調用rackGUI.create(),成功調用input_form()。點擊按鈕'create_button'成功呼叫drawRack打印到外殼'test'。我還添加了一個測試,其中打印了每個輸入框的值類型,即print type(rack_name.get()),並且這成功返回'str'類型。

所以主要的問題是輸入框是靜態的。

下面是我的代碼:

config.py

""" 
config.py 
""" 

import Tkinter as tk 
import tkMessageBox as tkmb 

#setup 
root = tk.Tk() 
root.title("TLA Database Tool") 
frame = tk.Frame(height = 300, width = 250) 
frame.pack() 

main.py

#main.py 
from config import * 
import rackGUI 

def createRackTemplate(): 
    rackGUI.create() 
def loadRackTemplate(): 
    rackGUI.load() 

menubar = tk.Menu(root) 
filemenu = tk.Menu(menubar) 
filemenu.add_command(label = "New", command = createRackTemplate) 
filemenu.add_command(label = "Load", command = loadRackTemplate) 
menubar.add_cascade(label = "File", menu = filemenu) 

tkmb.showinfo("Welcome", "Under File click New to create a new rack template.\n\ 
Click load to load rack template.") 
root.config(menu = menubar) 
root.mainloop() 

rackGUI.py

""" 
rackGUI.py 
""" 
from config import * 

def input_form(): 
    form_frame = tk.Frame(frame) 
    form_frame.pack() 

    tk.Label(form_frame, text = "Rack Template Name (e.g., Knox Type 4)").pack() 
    rack_name = tk.Entry(form_frame, textvariable = tk.StringVar()) 
    rack_name.pack() 
    tk.Label(form_frame, text = "Dimensions").pack() 
    tk.Label(form_frame, text = "#rack rows").pack() 
    num_rack_rows = tk.Entry(form_frame, textvariable = tk.StringVar()) 
    num_rack_rows.pack() 
    tk.Label(form_frame, text = "#nodes per row").pack() 
    num_slots = tk.Entry(form_frame, textvariable = tk.StringVar()) 
    num_slots.pack() 

    create_button = tk.Button(form_frame, text = "Create!",\ 
       command = lambda: drawRack(rack_name, num_rack_rows, num_slots)) 
    create_button.pack() 

def drawRack(rack_name, num_rack_rows, num_slots): 
    print rack_name.get(), num_rack_rows.get(), num_slots.get() 

def create():  
    input_form() 

def load(): 
    pass 
+0

它適用於我 - Linux Mint 16,Python 2.7.5 – furas

+0

你是什麼意思:'不會允許輸入任何東西?你不能使用鍵盤,或者你不能使用'set(「text」)'在輸入中設置文本? – furas

+0

在我試圖點擊框中,但文本光標不會顯示,所以我不能輸入任何東西。 – user3761743

回答

1

對於任何人誰後,我來到這裏,我的解決方案結束了

root.overrideredirect(True) 

在Windows上正常工作,但在Mac上導致此文本輸入問題。