2

I built application's interface by using for loops. I want user to input all nucleotides(one letter in one entry field), click button and other chains are generated automatically. Now I don't have any idea how to get access to value that is contained in Entry widget. I made some presentation of how this is supposed to work(how I think it's supposed to work:))enter image description here

import tkinter as tk


def generate_other_chains():
    nucleotides_list = []
    for triplet in dna1:
        if triplet != '-':
            for nucleotide in triplet:
                if triplet.get():
                    nucleotides_list.append(triplet.get())


window = tk.Tk()

#<-------complementary nucleotides dictionary------->
complementary_nucleotides_dna = {'a': 't', 't': 'a', 'c': 'g', 'g': 'c'}
complementary_nucleotides_rna = {'a': 'u', 'u': 'a', 'c': 'g', 'g': 'c'}

#<-------instruction label------->
enter_label = tk.Label(text='Fill one of the chains with nucleotides')
enter_label.grid()

#<-------first DNA chain------->
#<-------outer frame containing frames with Entry widgets on the first line------->
dna1 = tk.Frame(master=window)
for i in range(1, 10, 2):
#<-------inner frame containing 3 Entry widgets------->    
    triplet = tk.Frame(master=dna1)
    triplet.grid(row=1, column=i, pady=5)
#<-------chain's name------->
    if i == 1:
        dna1_label = tk.Label(master=triplet, text='DNA-1')
        dna1_label.pack(side=tk.LEFT)
#<-------creating 3 Entry widgets------->
    for j in range(0, 3):
        nucleotide = tk.Entry(master=triplet, width=1, font=('Helvetica', 14))
        nucleotide.pack(side=tk.LEFT)
#<-------creating separators between triplets------->
    if i != 9:
        separator_frame = tk.Frame(master=dna1)
        separator_frame.grid(row=1, column=i+1, pady=5)
        separator = tk.Label(master=separator_frame, text='-')
        separator.pack()
dna1.grid(row=1, column=0)

#<-------second DNA chain------->
#<-------outer frame containing frames with Entry widgets on the second line------->
dna2 = tk.Frame(master=window)
for i in range(1, 10, 2):
#<-------inner frame containing 3 Entry widgets------->  
    triplet = tk.Frame(master=dna2)
    triplet.grid(row=2, column=i, pady=5)
#<-------chain's name------->
    if i == 1:
        dna2_label = tk.Label(master=triplet, text='DNA-2')
        dna2_label.pack(side=tk.LEFT)
#<-------creating 3 Entry widgets------->
    for j in range(0, 3):
        nucleotide = tk.Entry(master=triplet, width=1, font=('Helvetica', 14))
        nucleotide.pack(side=tk.LEFT)
#<-------creating separators between triplets------->       
    if i != 9:
        separator_frame = tk.Frame(master=dna2)
        separator_frame.grid(row=2, column=i+1, pady=5)
        separator = tk.Label(master=separator_frame, text='-')
        separator.pack()
dna2.grid(row=2, column=0)

#<-------mRNA chain------->
#<-------outer frame containing frames with Entry widgets on the second line------->
mrna = tk.Frame(master=window)
for i in range(1, 10, 2):
#<-------inner frame containing 3 Entry widgets------->  
    triplet = tk.Frame(master=mrna)
    triplet.grid(row=3, column=i, pady=5)
#<-------chain's name------->
    if i == 1:
        dna2_label = tk.Label(master=triplet, text='MRNA')
        dna2_label.pack(side=tk.LEFT)
#<-------creating 3 Entry widgets------->
    for j in range(0, 3):
        nucleotide = tk.Entry(master=triplet, width=1, font=('Helvetica', 14))
        nucleotide.pack(side=tk.LEFT)
#<-------creating separators between triplets------->
    if i != 9:
        separator_frame = tk.Frame(master=mrna)
        separator_frame.grid(row=3, column=i+1, pady=5)
        separator = tk.Label(master=separator_frame, text='-')
        separator.pack()
mrna.grid(row=3, column=0)

#<-------tRNA chain------->
#<-------outer frame containing frames with Entry widgets on the second line------->
trna = tk.Frame(master=window)
for i in range(1, 10, 2):
#<-------inner frame containing 3 Entry widgets-------> 
    triplet = tk.Frame(master=trna)
    triplet.grid(row=4, column=i, pady=5)
#<-------chain's name------->
    if i == 1:
        dna2_label = tk.Label(master=triplet, text='TRNA')
        dna2_label.pack(side=tk.LEFT)
#<-------creating 3 Entry widgets------->
    for j in range(0, 3):
        nucleotide = tk.Entry(master=triplet, width=1, font=('Helvetica', 14))
        nucleotide.pack(side=tk.LEFT)
#<-------creating separators between triplets------->
    if i != 9:
        separator_frame = tk.Frame(master=trna)
        separator_frame.grid(row=4, column=i+1, pady=5)
        separator = tk.Label(master=separator_frame, text='-')
        separator.pack()
trna.grid(row=4, column=0)

#<-------button generating other chains of triplets------->
generate_button = tk.Button(text='Generate other chains', command=generate_other_chains)
generate_button.grid()
mies
  • 21
  • 2
  • I do not agree with the closing of the question, beyond the technicality the solution is not trivial and can lead to interesting food for thought, the answer does not mention populating the widgets created in a different way, use a generic variable for everyone and how to recover data always in a different way and manipulate them... – 1966bc Aug 26 '22 at 14:04

0 Answers0