2013-10-13 69 views
0

我对交互式python编程非常陌生,所以请耐心等待。我在Python 3.3中使用PyCharm。tkinter小部件界面交互按钮

我试图建立以下:

我要生成一个交互式窗口有两个文本输入框和两个按钮拉起功能:

-The第一个按钮(START)运行小文本搜索功能(我已经编写和测试过),而第二个按钮(退出)将退出应用程序。

- 第一个文本输入字段需要搜索字符串(例如:“Hello Stack World”),而另一个文本输入字段需要在第一个输入字符串中搜索字符串(例如:“Stack”) 。

计划是,一旦填入了两个文本字段,按下'开始'按钮将开始文本搜索功能,'QUIT'按钮则停止程序。

问题是,'QUIT'按钮的工作方式,但'开始'按钮什么也不做。我认为它实际上将我的程序发送到无限循环。

任何和所有的帮助真的很感激它。我是接口/ widget编程的新手。

在此先感谢!

这里是我的代码,因为我有现在:

import tkinter 
from tkinter import * 

class Application(Frame): 

def text_scan(self): 
    dataf = str(input()) '''string to be searched''' 
    s = str(input())  ''' string to search for''' 
    ''' ... I will leave out the rest of this function code for brevity''' 

def createWidgets(self): 

    root.title("text scan") 
    Label (text="Please enter your text:").pack(side=TOP,padx=10,pady=10) 
    dataf = Entry(root, width=10).pack(side=TOP,padx=10,pady=10) 

    Label (text="Please enter the text to find:").pack(side=TOP,padx=10,pady=10) 
    s = Entry(root, width=10).pack(side=TOP,padx=10,pady=10) 

    self.button = Button(root,text="START",command=self.text_scan) 
    self.button.pack() 

    self.QUIT = Button(self) 
    self.QUIT["text"] = "QUIT" 
    self.QUIT["fg"] = "red" 
    self.QUIT["command"] = self.quit 

    self.QUIT.pack({"side": "left"}) 

def __init__(self, master=None): 
    Frame.__init__(self, master) 
    self.filename = None 
    self.pack() 
    self.createWidgets() 

root = Tk() 
root.title("text scan") 
root.quit() 
app = Application(master=root) 
app.mainloop() 

回答

2

你不能用input混合的GUI。要从输入小部件获取值,您需要执行s.get()dataf.get()。但是,在创建小部件之前,您需要删除对pack的调用,并将其移至单独的语句。原因是pack返回None,所以目前datafsNone。您还需要将对这些小部件的引用保存为类属性。

def text_scan(...): 
    dataf_value = self.dataf.get() 
    ... 
... 
self.dataf = Entry(...) 
self.dataf.pack(...) 
... 
+0

纯粹的天才!非常感谢。既然你在这个主题上显然不是新手,你能指出我的正确方向:我如何让text_scan功能输出(搜索结果)在同一个窗口中弹出?现在,它在控制台中打印出来。再次感谢! –