2014-09-02 56 views
1

我试图在tkinter中编写一个应用程序,该应用程序将从您从下拉菜单中选择的文件加载随机行,并在文本窗口中显示选定的行。tkinter变量下拉选择空

好像在insert_text变量“VAR”不返回所选择的“选项”,但造成了下面的错误,而“空”字符串:

"File not found error" (FileNotFoundError: [Errno2] No such file or directory: '').

请帮帮忙!

#!/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() 
+0

感谢您编辑我的问题! :)我看到它看起来很奇怪,但是当我试图编辑它时,就像我第一次输入它一样。 : -/ – moupy 2014-09-02 21:27:18

回答

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小部件也是更好的。

+0

非常感谢,这真的帮了我很多! :)))可悲的是,我不能赞成,因为我似乎缺乏代表。 : - / – moupy 2014-09-02 21:19:44