# زبان های اسکریپتی > Python >  آموزش طراحی یک فرم ساده با استفاده از Tkinter Python

## laughing

در این پست قصد دارم طراحی یک برنامه ساده ویژوالی توسط پایتون را نشان بدهم. تصویر نهایی برنامه به صورت زیر است:
k0g3_simpleform.jpg

در این برنامه با استفاده از یک فرم ساده نام، نام خانوادگی و نام شهر را دریافت می کند. سپس آنها را در یک جدول نمایش می دهد.
این برنامه از دو کلاس 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

----------

