我不明白为什么我的代码中rackGUI.py
下的输入框是静态的/不允许输入任何内容。我相信所有Entry
对象都是正确实例化的。我将textvariable指定为StringVar()
的实例。我的直觉告诉我问题在于create_button
实例化中的命令参数,但我不确定为什么。我想通过设置command = lambda:function
函数将不会被调用。
点击菜单中的'New'
后,main.py
成功拨打rackGUI.create()
成功拨打input_form()
。单击按钮'create_button'
成功调用drawRack
,打印到shell '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 :(得分:1)
对于跟我来这里的人来说,我的解决方案最终成了
root.overrideredirect(True)
在Windows上正常工作,但在Mac上导致此文本输入问题。
答案 1 :(得分:0)
我实际上在那里发现了问题。问题似乎是窗口的焦点,因为您使用的是消息框。
在我的脚本中,我只是在打开另一个窗口(在我的例子中是一个文件对话框)之前放置了一个 root.update()
并且一切正常。有一个已经存在的问题:https://bugs.python.org/issue42867#msg384785