Используя 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](https://i.stack.imgur.com/e9fD7.jpg)