Как передать значения переключателя в событие <Return>? - PullRequest
1 голос
/ 06 мая 2020

Используя Python 3 и tkinter, я создаю инструмент GUI для поиска в большом корпусе - больше, чем, скажем, Библия. Я разработал интерфейс. После прочтения документации, просмотра руководств и т. Д. Я не могу понять, как передать значения переключателей, которые будут управлять выполнением поиска.

Переключатели не настроены на срабатывание при изменении , поскольку их 4 набора, и мне нужно выполнять разные виды поиска или вывода в зависимости от того, какие кнопки выбраны. Итак, у меня есть событие, которое запускается при нажатии клавиши ввода из поля ввода:

grc_inp.bind('<Return>', doReturn)

Я пробовал несколько разных способов передать значения переключателей, но ничего не работает.

Код:

# -*- coding: utf8 -*-
#
# TryTkinter06.py
# Created 2020-05-04
# Author: Dan Beatty
#
"""
GUI in Python. Trying to start processing input.
"""

import tkinter
from tkinter.constants import *

def doSearch(m, c, a, o, needle):
    # STUB
    print('Match type:', m)
    print('Case sensitivity:', c)
    print('Accent sensitivity:', a)
    print('Output desired:', o)
    print('Search term:', needle)

def doReturn(event):
    mst = mstate.get()
    cst = cstate.get()
    ast = astate.get()
    ost = ostate.get()
    search_for = grc_inp.get()
    # doSearch(mst, cst, ast, ost, search_for)

def main():
    rootWin = tkinter.Tk()

    # make panes
    pWin = tkinter.PanedWindow()
    pWin.pack(fill=BOTH, expand=1)
    panes = tkinter.PanedWindow(rootWin, orient=VERTICAL)
    pWin.add(panes)
    topPane = tkinter.Label(panes)
    panes.add(topPane)
    botPane = tkinter.Label(panes, text='bottom pane')
    panes.add(botPane)

    # make radiobutton sets
    # match state set
    mstate = tkinter.StringVar()
    ms_label = tkinter.Label(topPane, text='Match Type:')
    ms_part = tkinter.Radiobutton(topPane, text='partial word', variable=mstate, value='partial')
    ms_whole = tkinter.Radiobutton(topPane, text='whole word', variable=mstate, value='whole')
    ms_phrase = tkinter.Radiobutton(topPane, text='phrase', variable=mstate, value='phrase')
    # case state set
    cstate = tkinter.StringVar()
    cs_label = tkinter.Label(topPane, text='Case Matching:', bg='#dddddd')
    cs_insen = tkinter.Radiobutton(topPane, text='insensitive', variable=cstate, value='insensitive', bg='#dddddd')
    cs_sens = tkinter.Radiobutton(topPane, text='sensitive', variable=cstate, value='sensitive', bg='#dddddd')
    # accent state set
    astate = tkinter.StringVar()
    as_label = tkinter.Label(topPane, text='Accent Matching:')
    as_insen = tkinter.Radiobutton(topPane, text='insensitive', variable=astate, value='insensitive')
    as_sens = tkinter.Radiobutton(topPane, text='sensitive', variable=astate, value='sensitive')
    # output state set
    ostate = tkinter.StringVar()
    os_label = tkinter.Label(topPane, text='Output Type:', bg='#dddddd')
    os_hits = tkinter.Radiobutton(topPane, text='hit count', variable=ostate, value='hits', bg='#dddddd')
    os_refs = tkinter.Radiobutton(topPane, text='list references', variable=ostate, value='refs', bg='#dddddd')
    os_context = tkinter.Radiobutton(topPane, text='show context', variable=ostate, value='context', bg='#dddddd')

    # input box for grc search term
    grc_label = tkinter.Label(topPane, text='Search for:')
    grc_inp = tkinter.Entry(topPane, width=50)

    ms_label.grid(row=0, column=0, sticky=W, ipadx=10, ipady=5)
    ms_part.grid(row=0, column=1, sticky=W, ipadx=10, ipady=5)
    ms_whole.grid(row=0, column=2, sticky=W, ipadx=10, ipady=5)
    ms_phrase.grid(row=0, column=3, sticky=W, ipadx=10, ipady=5)
    cs_label.grid(row=1, column=0, sticky=W, ipadx=10, ipady=5)
    cs_insen.grid(row=1, column=1, sticky=W, ipadx=10, ipady=5)
    cs_sens.grid(row=1, column=2, sticky=W, ipadx=10, ipady=5)
    as_label.grid(row=2, column=0, sticky=W, ipadx=10, ipady=5)
    as_insen.grid(row=2, column=1, sticky=W, ipadx=10, ipady=5)
    as_sens.grid(row=2, column=2, sticky=W, ipadx=10, ipady=5)
    os_label.grid(row=3, column=0, sticky=W, ipadx=10, ipady=5)
    os_hits.grid(row=3, column=1, sticky=W, ipadx=10, ipady=5)
    os_refs.grid(row=3, column=2, sticky=W, ipadx=10, ipady=5)
    os_context.grid(row=3, column=3, sticky=W, ipadx=10, ipady=5)
    grc_label.grid(row=4, column=0, sticky=W, ipadx=10, ipady=5)
    grc_inp.grid(row=4, column=1, columnspan=3, sticky=W, ipadx=10, ipady=5, pady=5)

    grc_inp.bind('<Return>', doReturn)

    rootWin.title('Search Corpus')
    rootWin.geometry('1500x750')
    rootWin.mainloop() # creates the window




if __name__ == '__main__':
    main()

Скриншот GUI: GUI Screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...