Python zase :(

Sekcia: Programovanie 24.08.2007 | 20:31
Avatar Dare_devil Debian, OpenSuse  Používateľ
Dobry den. Zevraj su zaciatky vzdy tazke, je to pravda? Nedari sa mi najst dve veci,kombinujem totizto Python s PyQt, viete mam na zaciatku programu podmienku ze if subor==True: a potom else: no a vlastne ked subor existuje, zobrazi hlavne okno a ked neexistuje zobrazi akokeby registraciu, tam vyplni meno priezvisko, nazov svojej internetovej kaviarne a pocet pocitacov.. Ide mi o to ze ked da ulozit, potrebujem aby mi zobrazilo uz to hlavne okno, teda aby znova preloadlo (refreshlo) cely program aby sa potvrdila podmienka ze if subor==True: (pretoze po ulozeni sa vytvori subor nastavenia) a neviem ako :(
A podruhe potrebujem ukladat data do suboru v UTF-8 ale nejako sa mi to nedari, proste
Traceback (most recent call last):
  File "netdirector.py", line 41, in uloz
    fh.write(sprava)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 81:                ordinal not in range(128)

Tu je cely zdrojak keby ste ho nahodou potrebovali vidiet ako to funguje:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys, os, time
subor=os.path.exists('nastavenia') # vypise ci fajl nastavenia existuje, teda True - pravda alebo False - neexistuje
spusti=os.system('./skuska')
print "Vitaj! Ja som Net Director, spravca tvojej internetovej kaviarne"


if subor==True: # ak existuje vyhod cele okno s programom
  app = QtGui.QApplication(sys.argv)
  
  MainWindow = QtGui.QMainWindow()
  MainWindow.setWindowIcon(QtGui.QIcon('ikona.png'))
  MainWindow.setWindowTitle("Net Director")
  MainWidget=QtGui.QWidget(MainWindow)
  MainWindow.setCentralWidget(MainWidget)
  layout=QtGui.QGridLayout(MainWidget)
  headerLabel=QtGui.QLabel(u"<h1>Net Director - Správca siete</h1>", MainWidget)
  headerLabel.setAlignment(QtCore.Qt.AlignHCenter)
  layout.addWidget(headerLabel,0,0,1,2, QtCore.Qt.AlignHCenter)
  MainWindow.showMaximized()
  
  sys.exit(app.exec_())

else: # ak neexistuje nahod tam okienko s nastaveniami
  
  def uloz(): # funkcia uloz, platna iba v pripade ze subor==False
	kaviaren_ul=unicode(kaviaren.text())
	meno_ul=unicode(meno.text())
	priezvisko_ul=unicode(priezvisko.text())
	pocet_ul=unicode(pocet.text())
	sprava='#!/usr/bin/env python \n \
# -*- coding: utf-8 -*- \n \
%s \n \
%s \n \
%s \n \
%s \n' % (kaviaren_ul, meno_ul, priezvisko_ul, pocet_ul)
	vytvor=file('nastavenia','w') # vytvori sa subor nastavenia
	fh=open("nastavenia","w")    # otvaram, ukladam a zatvaram subor nastavenia
        fh.write(sprava)
        fh.close()
	
  app = QtGui.QApplication(sys.argv)
  MainWindow = QtGui.QMainWindow()
  MainWindow.setWindowIcon(QtGui.QIcon('ikona.png'))
  MainWindow.setWindowTitle("Nastavenia")
  MainWidget=QtGui.QWidget(MainWindow)
  MainWindow.setCentralWidget(MainWidget)
  
  layout=QtGui.QGridLayout(MainWidget)  

  logo=QtGui.QLabel(MainWidget)
  logo.setPixmap(QtGui.QPixmap("nastavenia_logo.png"))
  
  meno=QtGui.QLineEdit(MainWidget)
  priezvisko=QtGui.QLineEdit(MainWidget)
  pocet=QtGui.QLineEdit(MainWidget)
  kaviaren=QtGui.QLineEdit(MainWidget)
  
  menotext=QtGui.QLabel(u"Vaše meno:", MainWidget)
  priezviskotext=QtGui.QLabel(u"Vaše priezvisko:", MainWidget)
  pocettext=QtGui.QLabel(u"Počet počítačov:", MainWidget)
  kaviarentext=QtGui.QLabel(u"Názov vašej kaviarne:", MainWidget)
  
  posli=QtGui.QPushButton(u"Uložiť", MainWidget)
  zavri=QtGui.QPushButton(u"Zavrieť", MainWidget)
  
  layout.addWidget(logo,0,0,1,2, QtCore.Qt.AlignHCenter)
  layout.addWidget(meno,1,1)
  layout.addWidget(menotext,1,0)
  layout.addWidget(priezvisko,2,1)
  layout.addWidget(priezviskotext,2,0)
  layout.addWidget(pocet,3,1)
  layout.addWidget(pocettext,3,0)
  layout.addWidget(kaviaren,4,1)
  layout.addWidget(kaviarentext,4,0)
  layout.addWidget(posli,5,1)
  layout.addWidget(zavri,5,0)
  
  app.connect(zavri,QtCore.SIGNAL("clicked()"), MainWindow.close)
  app.connect(posli,QtCore.SIGNAL("clicked()"), uloz)
  
  import info
  
  print info.info[0]
  
  MainWindow.show()  
  
  
  sys.exit(app.exec_()),
Si mozete vsimnut v tej funkcii uloz ze som skusal vytvorit aj s kodovanim vo vnutri ten subor, ale nedari sa mi, proste to napise ze mam tam znaky ktore ascii nepovoluje.
Dakujem
There is no flag large enough to cover the shame of killing innocent people
    • Re: Python zase :( 24.08.2007 | 20:48
      Avatar Miroslav Bendík Gentoo  Administrátor
      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      toto hodiť na začiatok skriptu
      • Re: Python zase :( 24.08.2007 | 20:51
        Avatar Dare_devil Debian, OpenSuse  Používateľ
        ved to tam mam , hned na zaciatku, a ked som to dal do def uloz: tak to nic na veci nezmenilo
        There is no flag large enough to cover the shame of killing innocent people
        • Re: Python zase :( 24.08.2007 | 21:22
          Avatar Miroslav Bendík Gentoo  Administrátor
          Ehm, lama som, nevšimol som si. \xe9 by mal byť znak "é". V zdrojovom kóde nič také nevidím, takže netuším kde môže byť chyba.
          • Re: Python zase :( 24.08.2007 | 21:28
            Avatar Dare_devil Debian, OpenSuse  Používateľ
            Ide o to ze ja potrebujem ulozit to co napisem do QLineEdit do suboru... Mal som tam Viktor kafé bar ( nie kvoli mojej zlej anglictine ale kvoli tomu aby som overil ci sa mi ukladaju vsetky znaky spravne )
            There is no flag large enough to cover the shame of killing innocent people
            • Re: Python zase :( 25.08.2007 | 16:42
              Avatar Miroslav Bendík Gentoo  Administrátor
              fh = open( "nastavenia", "w", encoding="utf-8" ) 
              fh.write(sprava.encode('utf-8'))
              

              Možno bude stačiť jedno z toho.
              • Re: Python zase :( 25.08.2007 | 16:49
                Avatar Dare_devil Debian, OpenSuse  Používateľ
                fh.write(sprava.encode('utf-8'))
                dakujem velmi velmi pekne !!! :)
                There is no flag large enough to cover the shame of killing innocent people