Advertisement
furas

Python - formularz

Dec 2nd, 2016
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.98 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3.  
  4. import Tkinter as tk
  5.  
  6. #PLAN:
  7. # [ ] 1. Dokonczyc wyskakujace okna z bledami przy wysylaniu
  8. # [x] 2. Zrobic tak aby wpisane rzeczy zostawaly przy cofaniu sie do innego okna
  9. # [ ] 3. Zaprogramowac funkcje sieciowe
  10.  
  11. #---------------------------------------------------------------------
  12.  
  13. def okno_blad(tekst):
  14.     # tkitner moze miec tylko jedno glowne okno - tk.Tk()
  15.     # pozostale okna tworzy sie za pomoca tk.Toplevel
  16.     bladokno = tk.Toplevel()
  17.  
  18.     l = tk.Label(bladokno, text=tekst, font=("courier new", 12, 'bold'))
  19.     l.pack()
  20.  
  21.     b = tk.Button(bladokno, text="OK", font=("courier new", 12, 'bold'), command=bladokno.destroy)
  22.     b.pack()
  23.  
  24.     # tkitner moze miec tylko jeden mainloop()
  25.  
  26. #---------------------------------------------------------------------
  27.  
  28. def przelicz():
  29.     if var_przesylka.get() == 0:
  30.         okno_blad('Wybierz rodzaj przesylki!!!')
  31.     else:
  32.         suma = CENA * var_mnoznik.get() + var_przesylka.get()
  33.         var_kwota_laczna.set('Kwota laczna: {} zl.'.format(suma))
  34.  
  35. #---------------------------------------------------------------------
  36.    
  37. def change_to_page(number):
  38.     global current_page # zwykla zmienna an nie StringVar, etc. wiec musi byc global
  39.  
  40.     if current_page:
  41.         # schowaj strone
  42.         current_page.pack_forget()
  43.  
  44.     # ustaw nowa strone
  45.     current_page = all_pages[number]
  46.  
  47.     # pokaz nowa strone
  48.     current_page.pack()
  49.    
  50. # ---------------------------------------------------------------------
  51.  
  52. def create_page_0(okno):
  53.        
  54.     page = tk.Frame(okno, width=130, height=30)
  55.  
  56.     dane = tk.Frame(page)
  57.     dane.grid(row=0, column=0, columnspan=2)
  58.    
  59.     l = tk.Label(dane, text='Uzupelnij dane!')
  60.     l.grid(row=0, columnspan=2)
  61.  
  62.     l = tk.Label(dane, text='Imie')
  63.     l.grid(row=2, column=0)
  64.  
  65.     l = tk.Label(dane, text='Nazwisko')
  66.     l.grid(row=3, column=0)
  67.  
  68.     l = tk.Label(dane, text='Miejscowosc')
  69.     l.grid(row=4, column=0)
  70.  
  71.     l = tk.Label(dane, text='Kod pocztowy')
  72.     l.grid(row=5, column=0)
  73.  
  74.     l = tk.Label(dane, text='Ulica')
  75.     l.grid(row=6, column=0)
  76.  
  77.     l = tk.Label(dane, text='Numer domu')
  78.     l.grid(row=7, column=0)
  79.  
  80.     e = tk.Entry(dane, textvariable=var_imie)
  81.     e.grid(row=2, column=1)
  82.  
  83.     e = tk.Entry(dane, textvariable=var_nazwisko)
  84.     e.grid(row=3, column=1)
  85.  
  86.     e = tk.Entry(dane, textvariable=var_miejscowosc)
  87.     e.grid(row=4, column=1)
  88.  
  89.     e = tk.Entry(dane, textvariable=var_kod)
  90.     e.grid(row=5, column=1)
  91.  
  92.     e = tk.Entry(dane, textvariable=var_ulica)
  93.     e.grid(row=6, column=1)
  94.  
  95.     e = tk.Entry(dane, textvariable=var_nr_domu)
  96.     e.grid(row=7, column=1)
  97.  
  98.     # - poza frame z danymi -
  99.  
  100.     b = tk.Button(page, text="Anuluj", command=okno.destroy)
  101.     b.grid(row=1, column=0)
  102.  
  103.     b = tk.Button(page, text="Dalej", command=goto_page_1)
  104.     b.grid(row=1, column=1)
  105.  
  106.     return page
  107.  
  108. def goto_page_1():
  109.     # logika przy przejsciu na nastepna strone
  110.     print('przejscie: 0 -> 1')
  111.     change_to_page(1)
  112.    
  113. #---------------------------------------------------------------------
  114.  
  115. def create_page_1(okno):
  116.  
  117.     page = tk.Frame(okno, width=130, height=30)
  118.  
  119.     dane = tk.Frame(page)
  120.     dane.grid(row=0, column=0, columnspan=2)
  121.    
  122.     l = tk.Label(dane, text='Sposób dostawy:')
  123.     l.grid(row=1, column=0)
  124.    
  125.     dostawa1 = tk.Radiobutton(dane, text='List ekonomiczny',    value=4,  variable=var_przesylka, command=przelicz)
  126.     dostawa2 = tk.Radiobutton(dane, text='List polecony',       value=7,  variable=var_przesylka, command=przelicz)
  127.     dostawa3 = tk.Radiobutton(dane, text='Przesyłka kurierska', value=12, variable=var_przesylka, command=przelicz)
  128.     dostawa1.deselect()
  129.     dostawa2.deselect()
  130.     dostawa3.deselect()
  131.     dostawa1.grid(row=0, column=1, sticky=tk.W)
  132.     dostawa2.grid(row=1, column=1, sticky=tk.W)
  133.     dostawa3.grid(row=2, column=1, sticky=tk.W)
  134.  
  135.     l = tk.Label(dane, text='Liczba produktów:')
  136.     l.grid(row=3, column=0)
  137.  
  138.     s = tk.Spinbox(dane, width=4, from_=1, to=5, textvariable=var_mnoznik, command=przelicz)
  139.     s.grid(row=3, column=1)
  140.  
  141.     l = tk.Label(dane, text=' ')
  142.     l.grid(row=6)
  143.  
  144.     l = tk.Label(dane, text='Akceptuję regulamin:')
  145.     l.grid(row=7, column=0, sticky=tk.E)
  146.    
  147.     c = tk.Checkbutton(dane, variable=var_regulamin)
  148.     c.grid(row=7, column=1)
  149.     c.deselect()
  150.  
  151.     l = tk.Label(dane, text='Wysyłaj mi newsletter:')
  152.     l.grid(row=8, column=0, sticky=tk.E)
  153.    
  154.     c = tk.Checkbutton(dane, variable=var_email)
  155.     c.grid(row=8, column=1)
  156.     c.deselect()
  157.  
  158.     l = tk.Label(dane, textvariable=var_kwota_laczna, font=("Helvetica", 10))
  159.     l.grid(row=9, column=0, sticky=tk.W)
  160.  
  161.     # - poza frame z danymi -
  162.    
  163.     b = tk.Button(page, text='Wstecz', command=lambda:change_to_page(0))
  164.     b.grid(row=1, column=0)
  165.  
  166.     b = tk.Button(page, text="Dalej", command=goto_page_2)
  167.     b.grid(row=1, column=1)
  168.  
  169.     return page
  170.  
  171. def goto_page_2():
  172.     # logika przy przejsciu na nastepna strone
  173.     print('przejscie: 1 -> 2')
  174.     change_to_page(2)
  175.  
  176.     # update page 2
  177.     var_content1.set(var_imie.get() + ' ' + var_nazwisko.get())
  178.     var_content2.set(var_kod.get() + ' ' + var_miejscowosc.get())
  179.     var_content3.set(var_ulica.get() + ' ' + var_nr_domu.get())
  180.  
  181. #---------------------------------------------------------------------
  182.  
  183. def create_page_2(okno):
  184.     global pt_komentarz
  185.    
  186.     page = tk.Frame(okno, width=130, height=30)
  187.  
  188.     dane = tk.Frame(page)
  189.     dane.grid(row=0, column=0, columnspan=2)
  190.  
  191.     l = tk.Label(dane, text='   Komentarz:   ', font=("Helvetica", 11))
  192.     l.grid(row=0, columnspan=2)
  193.  
  194.     pt_komentarz = tk.Text(dane, height=6, width=49)
  195.     pt_komentarz.grid(row=1, columnspan=2)
  196.  
  197.     l = tk.Label(dane, text=' Podsumowanie:', font=("Helvetica", 11))
  198.     l.grid(row=2, column=0, sticky=tk.W)
  199.  
  200.     l = tk.Label(dane, textvariable=var_content1)
  201.     l.grid(row=3, column=1)
  202.  
  203.     l = tk.Label(dane, textvariable=var_content2)
  204.     l.grid(row=4, column=1)
  205.  
  206.     l = tk.Label(dane, textvariable=var_content3)
  207.     l.grid(row=5, column=1)
  208.  
  209.     l = tk.Label(dane, textvariable=var_kwota_laczna, font=("Helvetica", 10))
  210.     l.grid(row=6, column=0, sticky=tk.W)
  211.  
  212.     # - poza frame z danymi -
  213.  
  214.     b = tk.Button(page, text='Wstecz', command=lambda:change_to_page(1))
  215.     b.grid(row=1, column=0)
  216.  
  217.     b = tk.Button(page, text="Wyślij", command=goto_page_3)
  218.     b.grid(row=1, column=1)
  219.  
  220.     return page
  221.  
  222. def goto_page_3():
  223.     # logika przy przejsciu na nastepna strone
  224.    
  225.     print('przejscie: 2 -> 3')
  226.  
  227.     ok = True
  228.    
  229.     if var_regulamin.get() == 0:
  230.         okno_blad('Zaakceptuj regulamin !!!')
  231.         ok = False
  232.        
  233.     if var_imie.get() == '' or var_nazwisko.get() == '' or \
  234.         var_ulica.get() == '' or var_nr_domu.get() == '' or \
  235.         var_kod.get() == '' or var_miejscowosc.get() == '':
  236.         okno_blad('Uzupełnij dane !!!')
  237.         ok = False
  238.        
  239.     if ok:
  240.         okno_blad("Czas wysłać")
  241.  
  242. # --- main ---
  243.  
  244. # wartosci stale (nazwy UPPER_CASE)
  245.  
  246. CENA = 10
  247.  
  248. # init
  249.  
  250. okno = tk.Tk()
  251.  
  252. # globalne dane tkinter - musi byc po tk.Tk()
  253.  
  254. # page 0
  255. var_imie = tk.StringVar()
  256. var_nazwisko = tk.StringVar()
  257. var_kod = tk.StringVar()
  258. var_miejscowosc = tk.StringVar()
  259. var_ulica = tk.StringVar()
  260. var_nr_domu = tk.StringVar()
  261.  
  262. # page 1
  263. var_przesylka = tk.IntVar(value=0)
  264. var_mnoznik = tk.IntVar(value=1)
  265.  
  266. var_regulamin = tk.BooleanVar()
  267. var_email = tk.BooleanVar()
  268.  
  269. var_kwota_laczna = tk.StringVar()
  270.  
  271. # page 2
  272. var_content1 = tk.StringVar()
  273. var_content2 = tk.StringVar()
  274. var_content3 = tk.StringVar()
  275.  
  276. pt_komentarz = None # tk.Text nie ma textvariable
  277.  
  278. # ustawienia okna
  279.  
  280. okno.title('Formularz.')
  281. okno.resizable(False, False)
  282.  
  283. # utworzenie wszystkich stron
  284.  
  285. all_pages = []
  286. current_page = None
  287.  
  288. all_pages.append( create_page_0(okno) )
  289. all_pages.append( create_page_1(okno) )
  290. all_pages.append( create_page_2(okno) )
  291.  
  292. # pokazanie pierwszej strony
  293.  
  294. change_to_page(0)
  295.  
  296. # start
  297.  
  298. okno.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement