Tkinter: переключатель получение набора данных и функции для поиска совпадений и несоответствий между наборами данных

#function #tkinter #radio-button

Вопрос:

Совершенно новое в Python. Я пытаюсь создать интерфейс с различными радиокнопками. Каждый радиобуттон получает набор данных. Две кнопки, которые при нажатии вызывают две разные функции: поиск совпадений и несоответствий между наборами данных, выбранными радиокнопками. результат выводится в виде виджета. Я действительно не могу приступить к работе с функциями сопоставления и несоответствия. Могу ли я получить помощь, чтобы узнать, как действовать, пожалуйста? Лучшие,

 **from tkinter import * from tkinter import messagebox root = Tk() root.geometry('400x400') root.title("matches and mismatches") def matches():  messagebox.showinfo("function of finding matches") def mismatches():  messagebox.showinfo("function of finding mismatches") Datasetone = ["Michel", "John", "Carol", "Bob", "Justine", 'Harry',] Datasettwo = ["Justine", "John", "Carol", "Bob", "Josh", "Marcello"] Radiobutton(root, text='Dataset one').pack() Radiobutton(root, text='Dataset two').pack() Matches = Button(root, text='Matches', command=matches).pack() Mismatches = Button(root, text='Mismatches', command=mismatches).pack() root.mainloop()**  

Ответ №1:

вот пример кода того, как это можно сделать. Это просто, чтобы вы могли лучше понять это.

 import tkinter as tk from tkinter import messagebox  root = tk.Tk() root.geometry('400x400') root.title("matches and mismatches")  var = tk.IntVar() var2 = tk.IntVar()   data_set_one = ["Michel", "John", "Carol", "Bob", "Justine", "Harry"] data_set_two = ["Justine", "John", "Carol", "Bob", "Josh", "Marcello"]  dictionary = [{"id": 1, "data_set": data_set_one}, {"id": 2, "data_set": data_set_two}]   def matches(set1, set2):  for item in dictionary:  if item["id"] == set1.get():  first_set = item["data_set"]  elif item["id"] == set2.get():  second_set = item["data_set"]  else:  continue  match = []  for k in first_set:  for v in second_set:  if k == v:  match.append(k   ',')  messagebox.showinfo("Matches", message=match)   def mismatches(set1, set2):  for item in dictionary:  if item["id"] == set1.get():  first_set = item["data_set"]  elif item["id"] == set2.get():  second_set = item["data_set"]  else:  continue  mismatch = []  for k in first_set:  if k not in second_set:  mismatch.append(k   ',')  messagebox.showinfo("Mismatches", message=mismatch)   tk.Radiobutton(root, text='Dataset one', variable=var, value=1).pack() tk.Radiobutton(root, text='Dataset two', variable=var2, value=2).pack() Matches = tk.Button(root, text='Matches', command=lambda: matches(var, var2)).pack(pady=5) Mismatches = tk.Button(root, text='Mismatches', command=lambda: mismatches(var, var2)).pack(pady=5) root.mainloop()  

Импорт изменен с from tkinter import * на import tkinter as tk . Две переменные var и var2 создаются, и они являются int типом. После dictionary создается список, где каждому data_set дается свое id . В radiobuttons , variable и value добавляется. (для каждого набора данных есть tk.IntVar() и значение равно id inside dictionary ). Две функции, mismatches и matches создаются, и обе функции имеют две parameters . Внутри функции matches мы проверяем id dictionary , равно ли значение inside выбранному radiobutton , и если да, то переменной first_set присваивается значение dictionary для этого элемента. list match Создается пустое, и внутри двух loops мы проверяем, есть ли в двух списках совпадающие элементы, и если есть совпадающий элемент, он добавляется в список match . В messagebox заголовке задано значение, а сообщение равно match . В mismatches функция все похоже на matches функцию. Во mismatches 2-м способе получения совпадений/несоответствий отображается for loop .

Комментарии:

1. Спасибо, впечатляет 🙂

2. Еще раз привет, что делать, если мне нужен третий переключатель для третьего списка и посмотреть, есть ли в двух или во всех трех списках общие слова? вот что я сделал и, конечно, не работает. Чтобы было проще, я убрал несоответствия и работаю только со спичками. Я думаю, что начал правильно, но я не могу понять, как настроить функцию…