[英]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.