下拉选择空的tkinter变量

时间:2014-09-02 19:52:38

标签: variables python-3.x drop-down-menu tkinter ttk

我尝试在tkinter中编写一个应用程序,它会从您从下拉菜单中选择的文件中加载随机行,并在文本窗口中显示所选行。

似乎insert_text中的变量“var”不会返回选定的“选项”,而是返回“空”字符串,从而导致以下错误:

  

“找不到文件错误”(FileNotFoundError:[Errno2]没有这样的文件或   目录:'')。

请帮忙!

#!/usr/bin/env python
# Python 3

import tkinter
from tkinter import ttk
import random

class Application:

    def __init__(self, root):
        self.root = root
        self.root.title('Random Stuff')
        ttk.Frame(self.root, width=450, height=185).pack()     
        self.init_widgets()
        var = tkinter.StringVar(root)
        script = var.get()
        choices = ['option1', 'option2', 'option3']
        option = tkinter.OptionMenu(root, var, *choices)
        option.pack(side='right', padx=10, pady=10)              

    def init_widgets(self):
        ttk.Button(self.root, command=self.insert_txt, text='Button', width='10').place(x=10, y=10) 
        self.txt = tkinter.Text(self.root, width='45', height='5') 
        self.txt.place(x=10, y=50) 

    def insert_txt(self):
        var = tkinter.StringVar(root)
        name = var.get()
        line = random.choice(open(str(name)).readlines())
        self.txt.insert(tkinter.INSERT, line)

if __name__ == '__main__':
    root = tkinter.Tk()
    Application(root)
    root.mainloop()

1 个答案:

答案 0 :(得分:2)

那是因为您只是创建了一个之后未修改的空StringVar,因此会返回一个空字符串。

每次选择另一个选项时,OptionMenu都会使用调用指定方法的command参数。现在,您可以调用这样的方法,替换为insert_txt

def __init__(self):
    # ...
    self.var = tkinter.StringVar()
    self.options = tkinter.OptionMenu(root, var, *choices, command=self.option_selected)
    # ...    

def option_selected(self, event):
    name = self.var.get()
    # The stuff you already had

此外,您必须清空Text小部件,否则之前的文本将保留。我认为Entry窗口小部件也更好。