#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. Еще раз привет, что делать, если мне нужен третий переключатель для третьего списка и посмотреть, есть ли в двух или во всех трех списках общие слова? вот что я сделал и, конечно, не работает. Чтобы было проще, я убрал несоответствия и работаю только со спичками. Я думаю, что начал правильно, но я не могу понять, как настроить функцию…