绑定'输入'在复杂的Tkinter代码上

时间:2016-12-02 03:16:27

标签: python tkinter

我正在尝试对我在GitHub上找到的代码进行一些调整。 tkinter gui工作得很好,但我想将输入按钮绑定到“获取响应”。按钮:

class TkinterGUIExample(tk.Tk):

    def initialize(self):
        '''
        Set window layout.
        '''
        self.grid()

        self.usr_input = ttk.Entry(self, state='normal')
        self.usr_input.grid(column=0, row=0, sticky='nesw', padx=3, pady=3)

        self.respond = ttk.Button(self, text='Get Response', command=self.get_response)
        self.respond.grid(column=1, row=0, sticky='nesw', padx=3, pady=3)

        self.conversation_lbl = ttk.Label(self, anchor=tk.E, text='Conversation:')
        self.conversation_lbl.grid(column=0, row=1, sticky='nesw', padx=3, pady=3)

        self.conversation = ScrolledText.ScrolledText(self, state='disabled')
        self.conversation.grid(column=0, row=2, columnspan=2, sticky='nesw', padx=3, pady=3)

所以我知道我的按钮在哪里,但我不知道如何,何时或在何处绑定它,同时使用相同的语法。

我的完整代码可以在这里找到: https://github.com/graylu21/ELIZA-ChatterBot/blob/master/ELIZAChatterBot.py

2 个答案:

答案 0 :(得分:1)

只需将绑定添加到'<Return>'

self.respond = ttk.Button(self, text='Get Response', command=self.get_response)
self.respond.grid(column=1, row=0, sticky='nesw', padx=3, pady=3)
self.bind('<Return>', self.get_response)

每当你按输入 / 返回(Tkinter使用后者,因为'<Enter>'指的是当鼠标光标进入小部件时){{1}窗口处于活动状态,它将调用self

答案 1 :(得分:0)

搞定了!在评论中找到解决方案: How to bind the Enter key to a button in Tkinter

我没有将Enter键绑定到按钮,而是将其绑定到Entry窗口!

import "fmt"
import "log"
import "encoding/json"

const inputWorking = `
["AAAAAA", {"testcode" : "Sss"}, 66666666]
`

const inputBroken = `
[111111, {"testcode" : "Sss"}, 66666666]
`

type RawMessage struct {
    AlwaysString        interface{} `json:",string"`
    ClientData    ClientData
    ReceptionTime int
}

type ClientData struct {
    testcode string
}

func main() {

    var n RawMessage
    if err := json.Unmarshal([]byte(inputWorking), &n); err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%#v\n", n)

    var o RawMessage
    if err := json.Unmarshal([]byte(inputBroken), &o); err != nil {
        log.Fatal(err)
    }