Mali Tkinter primer [py]

Teme koje se tiču programiranja

Moderator: Urednik

Post Reply

Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 124
Joined: 28 Aug 2008, 15:58
Location: Beograd
Contact:

Post Napisano: 17 Dec 2011, 20:52


[glow=red,2,300][/glow]Budući da Python sekcija foruma zaista zvrji prazna... Programčić demonstrira najjednostavniji Tkinter program, međutim ono što ga izdvaja od običnog skripta i čini pravim programom je 100% OOP koncept, tako da je moguć *reuse* klase i sve ostale čari OOP-a. Koristio sam Python 2 standard, kao što sam napomenuo u jednom drugom postu na forumu, Tkinter je 100% kompatibilan i brži u Python -u 3, međutim još uvek postoje drugi moduli koji se uobičajeno povezuju sa Tkinter -om, ali koji još uvek nisu kompatibilni, ili su čak izbačeni iz Python 3 standardne biblioteke... Sledi kod, a datoteci promenite atribute da bude izvršna sa chmod +x .py i možete je pokrenuti iz X.org klijenta klikom. :) Datoteka »Lenna.jpg« se učitava dinamički i neophodno je da se nalazi u istom direktorijumu u kome je i program.

Code: Select all

#!/usr/bin/env python
#not python3 because of PIL :-)
# tkinter with oop :)
#GNU GPL Ivan Pavicevic, 2011.
#

from Tkinter import *
from PIL import Image, ImageTk

class App(Frame):
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.grid()
		self.master.title('Proba OOP koncepta i tkinter -a :-)')
		self.create_widgets()
		self.counter = 0
	
	def create_widgets(self):
		self.countLabel = Label(self, text = 'Count is: 0',background = 'white', foreground = 'red', font = 'Times 20', relief = 'groove', borderwidth=3)
		self.countLabel.grid(row=0, column=1)
		self.incrButton = Button(self, text = 'Increment', command=self.incr_counter)
		self.incrButton.grid(row=0, column=0)
		self.quitButton = Button(self, text='Quit', command=self.master.destroy)
		self.quitButton.grid(row=1, column=0)
		self.image = Image.open('Lenna.jpg')
		self.photo = ImageTk.PhotoImage(self.image)
		self.img = Label(image = self.photo)
		self.img.image = self.photo
		self.img.grid(row = 2, column=0)
	
	def incr_counter(self):
		self.counter += 1
		self.countLabel.configure(text = 'Count is: ' + str(self.counter))



def main():
	app = App()
	app.mainloop()

main()
Uzgred, ko administrira SMF mogao bi da se potrudi da pokrene npr. *Syntax Highlighter* i da tako kod bude lepo formatiran i obojen. :) (http://custom.simplemachines.org/mods/i ... p?mod=2109)
Attachments
Lenna.jpg
snapshot2.png
Last edited by bocke on 04 Jan 2012, 01:39, edited 1 time in total.
If you don't care where you are, then you ain't lost.



Administrator
Administrator
offline
User avatar

Posts: 4591
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 18 Dec 2011, 00:29


ivanp84 wrote: Uzgred, ko administrira SMF mogao bi da se potrudi da pokrene npr. *Syntax Highlighter* i da tako kod bude lepo formatiran i obojen. :) (http://custom.simplemachines.org/mods/i ... p?mod=2109)
Biće. :) Ali najverovatnije prelazimo na drugi forum softver. SMF će ostati možda još nekoliko nedelja. ;)

Btw, kad već pomenu OOP, Kako podeliti program na module? Da li si imao iskustva sa pakovanjem (setup tools)?



Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 124
Joined: 28 Aug 2008, 15:58
Location: Beograd
Contact:

Post Napisano: 18 Dec 2011, 01:06


Ja se kod modula na većim projektima držim Java konvencije, koje se pridržavaju i prijatelji iz dva projekta u kojima sam uključen, jedan je BKchem. Jednostavnije je kada se prati promena sadržaja koju je načinio drugi programer, pa je tako lako kaskadno izmeniti velike porcije koda prostom promenom objektnog modela u konkretnoj datoteci. Opet, to je danas i prihvaćena UML konvencija, tako da postaje svejedno u kom se OO jeziku implementira manje više. Dakle, jedna klasa jedna datoteka sa istim imenom, male varijacije... Podeliti program na module?! Python ne pravi razliku sve do runtime -a, dakle teoretski svaka datoteka, ukjlučujući i izvršnu sa main() metodom se tretira i kao modul. Zato je dobra praksa, ukoliko se piše mali program koji ima elemente koji se eventualno mogu ponovo iskoristiti, npr. neku zanimljivu funkciju za rad sa bazom podataka, da se odmah definiše u kom modelu se skript tretira kao program, a u kom kao modul, ja to najčešće radim na najstariji Python -ovski način:

Code: Select all

if __name__ == '__main__':
	main()
else:
	print('Using as module... :-)')
If you don't care where you are, then you ain't lost.



Administrator
Administrator
offline
User avatar

Posts: 4591
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 18 Dec 2011, 01:17


To, to. :) Može li neki jednostavan primer od dve-tri datoteke? ;)



Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 124
Joined: 28 Aug 2008, 15:58
Location: Beograd
Contact:

Post Napisano: 18 Dec 2011, 01:30


Trenutno sam manje kreativan, a ono što mi je na računaru su fragmenti koje ne bih još uvek delio javno, a i generalno se bave tematikom koja verovatno nije bliska - simulacija fluksa Ca2+ i NMDA receptora u dentatnom girusu hipokampusa Wistar pacova...
Problem je u tome što su igrarije sa jednostavnim primerima verovatno na nekom starom disku iz vremena kada sam učio jezik, ali ne sumnjam da nije teško izguglati adekvatne primere.
Preporučujem da dovučeš bilo koji robustniji python programčić i da uradiš disekciju koda, može i pomenuti BKChem, mada je on prilično veliki u Python-ovskom smislu. :)
If you don't care where you are, then you ain't lost.


Post Reply

Who is online

Users browsing this forum: No registered users and 6 guests