UnboundLocalError:赋值前引用的局部变量'output'

时间:2015-12-31 12:33:20

标签: python tkinter

我必须在学校为我的生物课写一个程序。它应该“翻译”四个字母A,C,U和G的三重组合[X代表A,C,U和G可以站在那里的可能性]。一个例子是GCX .. GCX是丙氨酸的三重奏。

程序应该获取Input(tripplet)并在我的GUI(tkinter)的标签中打印这个tripplet的氨基酸。

为了让我更容易,我只包括GCX和Alanine的例子 - 它应该在Lable中打印“Alanine [Ala]”,即使我在条目中输入'gcx'。

from tkinter import *
import tkinter as tk

# Interface Construction

# Basic Interface
root = Tk()
root.title("Genetic Translator")
root.geometry("300x175")

# Solid Label "Information for Input"
s_label2 = Label(root, text = "\nInput Tripplet which decodes for an amino acid:\n")
s_label2.pack()

# Mainentry line (tripplet = trip)
trip = Entry(root)
trip.pack()

# .upper() Function
trip = str(trip)
trip = trip.upper()

# Output Function (Trans:    trip -in- AS)
def Input():
    output = tk.StringVar(output)
    o_screen.configure(text = (output.get()))

if trip == "GCX":
    output = "Alanine [Ala]"
    Input()
else:
    output = "Unknown tripplet!"

# Space Label 1
space_label1 = Label(root)
space_label1.pack()

# Button "Confirm"
mainbutton = Button(root, text = "Confirm", command = Input)
mainbutton.pack()

# Space Label 2
space_label2 = Label(root)
space_label2.pack()

# Output Screen
o_screen = Label(root)
o_screen.pack()

# Mainloop function for Interface Options
mainloop()

1 个答案:

答案 0 :(得分:1)

您在代码中创建局部变量输出并尝试在创建之前访问它时出现代码错误。更改函数中的名称将修复错误:

def Input():
    out = tk.StringVar(output)
    o_screen.configure(text = (out.get()))

这意味着您在if / else块中创建的全局output将被使用,但您的代码仍然无法完成您想要的操作。

使用dict将输入映射到输出更容易从Entry中获取文本:

root = Tk()
root.title("Genetic Translator")
root.geometry("300x175")

# Solid Label "Information for Input"
s_label2 = Label(root, text = "\nInput Tripplet which decodes for an amino acid:\n")
s_label2.pack()

trip = Entry(root)
trip.pack()


output = {"GCX":"Alanine [Ala]"}
# Output Function (Trans:    trip -in- AS)
def Input():
    o_screen.configure(text=(output.get(trip.get(),"Unknown tripplet!")))

# Space Label 1
space_label1 = Label(root)
space_label1.pack()

# Button "Confirm"
mainbutton = Button(root, text = "Confirm", command = Input)
mainbutton.pack()

# Space Label 2
space_label2 = Label(root)
space_label2.pack()

# Output Screen
o_screen = Label(root)
o_screen.pack()

# Mainloop function for Interface Options
root.mainloop()

使用"Unknown tripplet!"作为dict.get的默认参数将意味着如果用户输入您在dict中没有作为键的任何内容将意味着将显示。