簡體   English   中英

通過使用Tkinter:將Entry轉換為下拉菜單以進行選擇:

[英]By using Tkinter : Convert the Entry to drop down menu to choose from:

我正在使用Tkinter並想將前三個tk.Entry()從Entry轉換為下拉菜單,使用戶可以選擇百分比(0.01%,0.02%等)。

'''This simple App calculates a (component grade) for student. The way it works like the following:
the students enter the Value of school, Qiyas, and Comprehensive (in percent out of 100%), Then
the students enter the school, Qiyas, and Comprehensive grades also (in percent out of 100%), 
the calculation of the component grade like this:
((school grade*school value)+(Qiyas*Qiyas value)+(Comprehensive grade*(Comprehensive value)))
'''

from PIL import Image, ImageTk
import datetime
import tkinter as tk



window = tk.Tk()
window.geometry("350x400")
window.title("Calculate the final grade")

#I would like to convert the following tk.Entry() to DropDown Menu
school_value_entry= tk.Label(text="Enter the Value of school in % (ex. 0.50)")
school_value_entry.grid(column = 0, row=1)
school_value_entry=tk.Entry()
school_value_entry.grid(column = 2 , row=1)

Qiyas_value_entry= tk.Label(text="Enter the Value of Qiyas in % (ex. 0.25)")
Qiyas_value_entry.grid(column = 0, row=2)
Qiyas_value_entry=tk.Entry()
Qiyas_value_entry.grid(column = 2 , row=2)


Comprehensive_value_entry= tk.Label(text="Enter the Value of Comprehensive in %(ex. 0.30)")
Comprehensive_value_entry.grid(column = 0, row=3)
Comprehensive_value_entry=tk.Entry()
Comprehensive_value_entry.grid(column = 2 , row=3)


school= tk.Label(text="High School Grade")
school.grid(column = 0, row=4)
school_entry=tk.Entry()
school_entry.grid(column = 2 , row=4)

Qiyas= tk.Label(text="Qiyas Grade")
Qiyas.grid(column = 0, row=5)
Qiyas_entry=tk.Entry()
Qiyas_entry.grid(column = 2 , row=5)

Comprehensive= tk.Label(text="Comprehensive Grade ")
Comprehensive.grid(column = 0, row=6)
Comprehensive_entry=tk.Entry()
Comprehensive_entry.grid(column = 2 , row=6)

#Calculating the grade& get the value from the user

def calculate_grade():
    print(school_entry.get())
    print(Qiyas_entry.get())
    print(Comprehensive_entry.get())

    Mohammed = person('Your Component Grade is:', float(school_entry.get()),
                                                float(Qiyas_entry.get()),
                                                float(Comprehensive_entry.get()),
                                                float(school_value_entry.get()),
                                                float(Qiyas_value_entry.get()),
                                                float(Comprehensive_entry.get()))

    text_answer= tk.Text(master = window, height= 20, width= 30)
    text_answer.grid(column= 2, row= 7)
    answer_text= "{} {} ".format(Mohammed.name,"%.2f" % Mohammed.grade())
    text_answer.insert(tk.END, answer_text)


claculate_butten= tk.Button(text="Calculate Grade", command= calculate_grade)
claculate_butten.grid(column = 2, row=7)


class person:

    def __init__(self, name, a, f, g, x, y, z):
        self.name= name
        self.a= school_value_entry
        self.y= Qiyas_value_entry
        self.z= Comprehensive_value_entry
        self.x= school
        self.f= Qiyas
        self.g= Comprehensive


    def grade(self):

        a= school_value_entry.get()
        f= Qiyas_value_entry.get()
        g= Comprehensive_value_entry.get()
        x= school_entry.get()
        y= Qiyas_entry.get()
        z= Comprehensive_entry.get()

        ''' the calculation of the component grade works like this:
((school grade*school value)+(Qiyas*Qiyas value)+(Comprehensive grade*(Comprehensive value))) '''

        grade  = (float(school_entry.get())*float(school_value_entry.get()))+(float(Qiyas_entry.get())*float(Qiyas_value_entry.get()))+(float(Comprehensive_entry.get())*float(Comprehensive_value_entry.get()))
        return grade

image = Image.open('/Users/macbookpro/Downloads/logo.jpg')
image.thumbnail((300, 400), Image.ANTIALIAS)
photo= ImageTk.PhotoImage(image)
label_image= tk.Label(image = photo)
label_image.grid(column=2 , row=0)
#input("Press enter to exit ;)")

window.mainloop()

看代碼,有幾個問題。 person接縫毫無意義,因為在函數中可以完成所有操作。 您分配了變量,但是然后再次使用.get()方法,而不是使用創建的變量。 因此,代碼中的某些內容毫無意義。

話雖如此,我在前三個輸入框的位置添加了一些下拉菜單框。 我設置它的方式可能並不完美,但這只是一個開始,您應該可以對代碼進行改進以滿足您的需求。

首先,我創建了一個字典,將其與下拉框一起使用以提供每個百分比的值,並創建了一些稍后將使用的變量。

drop_choice = {}
s1 = "0.01"
q1 = "0.01"
c1 = "0.01"

其次,我創建了一些函數,每當它們各自的下拉列表更改時,這些函數將用於更新s1,q1和c1。

def callback1(value):
    global s1
    s1 = value

def callback2(value):
    global q1
    q1 = value

def callback3(value):
    global c1
    c1 = value

第三,我創建了一個函數,將所有值添加到我們的drop_choice字典中。

我不完全知道您想要的所有值,所以我創建了0.01-1.00。

def setup_percentage():
    new_percent = 0.00
    for i in range(100):
        new_percent += 0.01
        new_value = float('{0:.2f}'.format(new_percent))
        drop_choice[str(new_value)] = new_value

setup_percentage()

為此,我為每個下拉菜單創建了StringVar()

school_value_entry_variable = tk.StringVar()
Qiyas_value_entry_variable = tk.StringVar()
Comprehensive_value_entry_variable = tk.StringVar()

最后的主要更改是創建下拉菜單。

option1 = tk.OptionMenu(window, school_value_entry_variable, *drop_choice, command = callback1)
school_value_entry_variable.set('0.01')
option1.grid(column = 2 , row=1)

之后,我修改了一些公式以使用我首先創建的s1,q1和c1變量。

通過所有這些信息,您應該能夠更好地了解如何設置這些下拉菜單。

以下是代碼的復制粘貼版本以及添加的下拉列表:

我將代碼留在了您的前三個輸入小部件中。 我只是將它們注釋掉並添加了下拉菜單。

import tkinter as tk


window = tk.Tk()
window.geometry()
window.title("Calculate the final grade")

s1 = "0.01"
q1 = "0.01"
c1 = "0.01"

def callback1(value):
    global s1
    s1 = value

def callback2(value):
    global q1
    q1 = value

def callback3(value):
    global c1
    c1 = value

drop_choice = {}
school_value_entry_variable = tk.StringVar()
Qiyas_value_entry_variable = tk.StringVar()
Comprehensive_value_entry_variable = tk.StringVar()

def setup_percentage():
    new_percent = 0.00
    for i in range(100):
        new_percent += 0.01
        new_value = float('{0:.2f}'.format(new_percent))
        drop_choice[str(new_value)] = new_value

setup_percentage()
print(drop_choice)

#I would like to convert the following tk.Entry() to DropDown Menu
school_value_entry= tk.Label(window, text="Enter the Value of school in % (ex. 0.50)")
school_value_entry.grid(column = 0, row=1)
# school_value_entry=tk.Entry()
# school_value_entry.grid(column = 2 , row=1)
option1 = tk.OptionMenu(window, school_value_entry_variable, *drop_choice, command = callback1)
school_value_entry_variable.set('0.01')
option1.grid(column = 2 , row=1)

Qiyas_value_entry= tk.Label(window, text="Enter the Value of Qiyas in % (ex. 0.25)")
Qiyas_value_entry.grid(column = 0, row=2)
# Qiyas_value_entry=tk.Entry()
# Qiyas_value_entry.grid(column = 2 , row=2)
option2 = tk.OptionMenu(window, Qiyas_value_entry_variable, *drop_choice, command = callback2)
Qiyas_value_entry_variable.set('0.01')
option2.grid(column = 2 , row=2)

Comprehensive_value_entry= tk.Label(window, text="Enter the Value of Comprehensive in %(ex. 0.30)")
Comprehensive_value_entry.grid(column = 0, row=3)
# Comprehensive_value_entry=tk.Entry()
# Comprehensive_value_entry.grid(column = 2 , row=3)
option3 = tk.OptionMenu(window, Comprehensive_value_entry_variable, *drop_choice, command = callback3)
Comprehensive_value_entry_variable.set('0.01')
option3.grid(column = 2 , row=3)

school= tk.Label(text="High School Grade")
school.grid(column = 0, row=4)
school_entry=tk.Entry(window)
school_entry.grid(column = 2 , row=4)

Qiyas= tk.Label(text="Qiyas Grade")
Qiyas.grid(column = 0, row=5)
Qiyas_entry=tk.Entry(window)
Qiyas_entry.grid(column = 2 , row=5)

Comprehensive= tk.Label(text="Comprehensive Grade ")
Comprehensive.grid(column = 0, row=6)
Comprehensive_entry=tk.Entry(window)
Comprehensive_entry.grid(column = 2 , row=6)

#Calculating the grade& get the value from the user

def calculate_grade():
    Mohammed = person('Your Component Grade is:', float(school_entry.get()),
                                                float(Qiyas_entry.get()),
                                                float(Comprehensive_entry.get()),
                                                float(s1),
                                                float(q1),
                                                float(c1))

    text_answer= tk.Text(master = window, height= 20, width= 30)
    text_answer.grid(column= 2, row= 8)
    answer_text= "{} {} ".format(Mohammed.name,"%.2f" % Mohammed.grade())
    text_answer.insert(tk.END, answer_text)


claculate_butten= tk.Button(text="Calculate Grade", command= calculate_grade)
claculate_butten.grid(column = 2, row=7)

class person:

    def __init__(self, name, a, f, g, x, y, z):
        self.name= name
        self.a= school_value_entry
        self.y= Qiyas_value_entry
        self.z= Comprehensive_value_entry
        self.x= school
        self.f= Qiyas
        self.g= Comprehensive

    def grade(self):
        grade  = float(school_entry.get()) * float(s1) + float(Qiyas_entry.get()) * float(q1) + float(Comprehensive_entry.get()) * float(c1)
        return grade

window.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM