PDA

View Full Version : آموزش طراحی یک فرم ساده با استفاده از Tkinter Python



laughing
سه شنبه 21 مهر 1394, 19:10 عصر
در این پست قصد دارم طراحی یک برنامه ساده ویژوالی توسط پایتون را نشان بدهم. تصویر نهایی برنامه به صورت زیر است:
136005

در این برنامه با استفاده از یک فرم ساده نام، نام خانوادگی و نام شهر را دریافت می کند. سپس آنها را در یک جدول نمایش می دهد.
این برنامه از دو کلاس Person و GUIForm تشکیل شده است.
کلاس Person مشخصات وارد شده را در خود نگه می دارد و به صورت زیر است:


class Person(object):
def __init__(self):
self.id = None
self.firstName = None
self.lastName = None
self.city = None

#................................................. .......................
def __init__(self, id, firstName, lastName, city):
self.id = id
self.firstName = firstName
self.lastName = lastName
self.city = city

در کلاس GUIForm یک فرم ویژوالی می سازیم و از این فرم برای وارد کردن اطلاعات و نمایش آنها استفاده می کنیم. این کلاس شامل چندین متد است.
در ابتدا در متد init اجزا و ویجت های بکار رفته در فرم را تعریف می کنیم.


def __init__(self):
self.root = None

self.firstNameLabel = None
self.lastNameLabel = None
self.cityLabel = None

self.firstNameEntry = None
self.lastNameEntry = None
self.cityComboBox = None

self.okButton = None
self.exitButton = None

self.errorLabel = None
self.text = None #text of errorLabel

self.frame1 = None
self.frame2 = None

self.personId = 0
self.personList = []

#define root
self.root = Tk()
self.root.title('Simple From *** Laughing')
self.root.geometry("400x600+20+20")



برنامه شامل دو فریم است. یک فرم اطلاعات را از کاربر می گیرد که به آن فریم 1 می گویم و ساخت آن توسط متد زیر انجام می شود:


def createFrame1(self):
#define frame1
#frame1 contains input form, like Labels, Entrys and Buttons.
self.frame1 = Frame(self.root)
self.frame1.grid(row = 0)

Label(self.frame1, text = 'Enter your personal information, please').grid( columnspan = 3, sticky = W, pady = 10)

#First name
self.firstNameLabel = Label(self.frame1, text = 'First name :').grid(row = 1, column = 0, sticky = W)
self.firstNameEntry = Entry(self.frame1)
self.firstNameEntry.grid(row = 1, column = 1)

#Last name
self.lastNameLabel = Label(self.frame1, text = 'Last name :').grid(row = 2, column = 0, sticky = W)
self.lastNameEntry = Entry(self.frame1)
self.lastNameEntry.grid(row = 2, column = 1)

#City
cityList = (
'Tabriz',
'Tehran',
'Sari',
'Mashhad',
'Kashan',
'Qom',
'Shiraz',
'Bam',
'Khoramabad'
)
self.cityLabel = Label(self.frame1, text = 'City :').grid(row = 3, column = 0, stick = W)
self.cityComboBox = Combobox(self.frame1, values = cityList, state = 'readonly')
self.cityComboBox.set(cityList[0])
self.cityComboBox.grid(row = 3, column = 1)

#row 4 for error messages.
self.text = StringVar()
self.text.set(' ')
self.errorLabel = Label(self.frame1, textvariable = self.text, foreground = "red")\
.grid(row = 4, columnspan = 3, sticky = W)


#Buttons
self.okButton = Button(self.frame1, text = 'Ok', command = self.ok_command)
self.okButton.grid(row = 5, column = 0)

self.exitButton = Button(self.frame1, text = 'Exit', command = self.exit_command)
self.exitButton.grid(row = 5, column = 2)



فریم دیگر که اطلاعات را در یک جدول نمایش می دهد که آن را توسط تابع زیر تعریف می کنیم:


def createFrame2(self):
#define frame2
#frame2 contains table of information
self.frame2 = Frame(self.root)
self.frame2.grid(row = 1, sticky = W)

#Titles
Label(self.frame2, text = '#').grid(row = 0, column = 0)
Label(self.frame2, text = 'First name').grid(row = 0, column = 1)
Label(self.frame2, text = 'Last name').grid(row = 0, column = 2)
Label(self.frame2, text = 'City').grid(row = 0, column = 3)
Label(self.frame2, text = '_________________________________________________ _____________')\
.grid(row = 1, columnspan = 10)


for pp in self.personList:
Label(self.frame2, text = pp.id).grid(row = pp.id + 1, column = 0)
Label(self.frame2, text = pp.firstName).grid(row = pp.id + 1, column = 1)
Label(self.frame2, text = pp.lastName).grid(row = pp.id + 1, column = 2)
Label(self.frame2, text = pp.city).grid(row = pp.id + 1, column = 3)

در تابع main هم به فراخوانی اشیا و متد ها می پردازیم تا نتیجه نهایی بدست آید:


def main():
guiForm = GUIForm()
guiForm.createFrame1()
guiForm.createFrame2()
guiForm.showForm()

#................................................. .......................
if __name__ == '__main__':
main()

فایل نهایی برنامه توسط لینک زیر در دسترس است
http://uplod.ir/k0rn43i4ex3j/SimpleForm2.py.htm