Я пытаюсь написать базу данных бактерий с возможностью поиска в графическом интерфейсе с массивом базы данных, встроенным в код с использованием tkinter python 2.7.При выборе определенных критериев с помощью радиокнопок выборочный поиск в массиве, а затем нажатие кнопки «Идентифицировать» должно распечатать идентификатор всех бактерий, которые соответствуют этим выборкам в качестве метки.
Я разместил нефункциональный фрагмент [idbuttonclick (self)] ниже.
Что должен делать фрагмент кода idbuttonclick (self):
1) Поискматрица / массив с именем «data», для которых столбцы 1–4 представляют параметр переменной строки радиокнопки, а в каждой строке идентификатор бактерии
2) Выберите строки в «data», чьи параметры переменных соответствуют выбранным значениям радиокнопки
3) Печатает идентификаторы бактерий в столбце данных 0 из выбранных строк в качестве метки в self.id_frame, если число идентификаторов равно 1-20.В противном случае напечатайте метку сообщения «Ошибка: недостаточно данных».
def idbuttonclick(self):
def column(matrix, i):
if column(data, 1)!=self.gram_option.get(): line.destroy()
if column(data, 2)!=self.meta_option.get(): line.destroy()
if column(data, 3)!=self.cat_option.get(): line.destroy()
if column(data, 4)!=self.oxi_option.get(): line.destroy()
column(data, 0)==id
if id.count >= 20 or id.count == 0:
Label(self.id_frame, text = "Error: Not enough data", background = "white").pack(side=TOP, anchor = N)
else: Label(self.id_frame, text = id, background = "white").pack(side=TOP, anchor = N)
Я получил код, чтобы дать мне метки id.frame, основанные на выборе радиокнопок, но все еще не могу связать выбор радиокнопокк координатам в массиве, чтобы затем предоставить метки id.frame на основе совпадений координат радиокнопки / массива.
Теперь это, в частности, массив, а не матрица, поскольку матрицы и списки списков и кортежей, очевидно, не могут хранить элементы с использованием координатного индекса (i, j).
Вот мой новый черновик ниже, который включает в себя команду click для массива и idbutton.
Как это должно работать: Любое имя бактерии в столбце массива 1 со значением «+» в столбце массива 2 в той же строке должно появиться в метке id.frame, есликнопка радио self.gram_option = ('+') выбрана.Таким образом, на этикетке должно быть написано: «Acetobacter aceti, Pseudomonas sp.»
Кроме того, нажатие self.meta_option.get () должно соответствовать столбцу 2, сужая выбор: значение «fac anaerobe» будет обозначать «Acetobacter aceti»и значение «аэроб» будет обозначать «Pseudomonas sp.»
data = array([
['Acetobacter aceti','+', 'fac anaerobe', '+', '--'],
['Citrobacter freundii','--', 'fac anaerobe', '+', '--'],
['Pseudomonas sp','+', 'aerobe', '--', '--']])
data.readlines()
def idbuttonclick(self, event):
self.id_frame.destroy()
self.id_frame = Frame(self.main_right_frame, borderwidth=5, height=50, background="white")
self.id_frame.pack(side=TOP, fill=BOTH)
if data[i,1]==self.gram_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,2]==self.shape_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,3]==self.meta_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,4]==self.cat_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
else: Label(self.id_frame, text = 'Error: Not enough data', background = "white").pack(side=LEFT, anchor = N)
Если я не правильно указываю координаты моего массива или кто-то знает способ устроить описанный выше сценарий в коде Python ... Я получил 56 просмотров по этому вопросу за период околодве недели, но никакой обратной связи от написания кода от сообщества.Надеемся, что эта новая версия лучше отвечает тому, что я изначально имел в виду и что нужно настроить.
С уважением,
Джефф