Code - what could be done better?

  • Thread starter Florian Wollenschein
  • Start date
F

Florian Wollenschein

Hi all,

here's the main code of thc, my txt to html converter. Since I'm a
beginner it is far, far, faaaaaaar away from perfect or even good :)
What could be done better?

====================================================================================
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# thc
# Copyright (C) 2007 - 2009 Listick Lorch
#
# <[email protected]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA

import sys
import webbrowser
import texts_en as texts # you have to change only the countrycode like
texts_de ...
from PyQt4 import QtGui, QtCore
from mainframe_ui import Ui_MainWindow as Frm
import abtDialogFrame

class ThcMainframe(QtGui.QMainWindow, Frm):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)

# ---MEMBERS---
self.file_to_convert = ''
self.file_to_write = ''
self.txt_file_to_convert = '' # stores the text of the .txt file
self.bgColor_R = hex(255)[2:].zfill(2)
self.bgColor_G = hex(255)[2:].zfill(2)
self.bgColor_B = hex(255)[2:].zfill(2)
self.font_size = 0

# ---SLOTS---
# browse file to convert
self.connect(self.btnBrowseFileConv,
QtCore.SIGNAL("clicked()"), self.onBrowseFileConv)
# browse file to write
self.connect(self.btnBrowseFileWrite,
QtCore.SIGNAL("clicked()"), self.onBrowseFileWrite)
# convert
self.connect(self.btnConvert,
QtCore.SIGNAL("clicked()"), self.onConvert)
# show result
self.connect(self.btnShowResult,
QtCore.SIGNAL("clicked()"), self.onShowResult)
# select color
self.connect(self.btnColorSelect,
QtCore.SIGNAL("clicked()"), self.SelectColor)
# font size
self.connect(self.horizontalSlider,
QtCore.SIGNAL("changed()"), self.onFontSizeChanged)
# help menu
self.connect(self.actionGo_to_listick_org,
QtCore.SIGNAL("triggered()"), self.GoToListickOrg)

self.connect(self.actionAbout,
QtCore.SIGNAL("triggered()"), self.OpenAbout)
# quit
self.connect(self.btnQuit,
QtCore.SIGNAL("clicked()"), self.onQuit)

self.connect(self.actionExit,
QtCore.SIGNAL("triggered()"), self.onQuit)

def onBrowseFileConv(self):
self.file_to_convert = QtGui.QFileDialog.getOpenFileName(self,
texts.FileMenuOpen, '/home', '*.txt')
self.inpFileConv.setText(self.file_to_convert)

def onBrowseFileWrite(self):
self.file_to_write = QtGui.QFileDialog.getSaveFileName(self,
texts.FileMenuSaveAs, '/home', '*.htm*')
self.inpFileWrite.setText(self.file_to_write)

def onConvert(self):
# read the title
html_file_title = str(self.inpTitle.displayText())
# read the txt
file_open = open(self.file_to_convert)
print texts.FileOpened
self.txtOutput.insertPlainText(texts.FileOpened)
self.txt_file_to_convert = file_open.read()
file_open.close()
print texts.FileClosed
self.txtOutput.insertPlainText(texts.FileClosed)

# write html
file_open = open(self.file_to_write, "w")
print texts.WritingFile
self.txtOutput.insertPlainText(texts.WritingFile)
strict_or_transitional = {True: 'Transitional', False: 'Strict'}
spec = strict_or_transitional[self.rdioBtnTransitional.isChecked()]
doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
%s//EN">\n' % spec
file_open.write(doctype)
file_open.write('<HTML>\n')
# HTML head stuff
file_open.write('<HEAD>\n')
file_open.write('<META HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=UTF-8">\n')
file_open.write('<TITLE>%s</TITLE>\n' % html_file_title)
file_open.write('<META NAME="Generator" CONTENT="thc -
Txt-to-Html-Converter %s">\n' % texts.versionInfo)
file_open.write('</HEAD>\n')
#head end

#HTML body
file_open.write('<BODY BGCOLOR="#%s%s%s">\n' % (self.bgColor_R,
self.bgColor_G, self.bgColor_B))
file_open.write(self.txt_file_to_convert)
file_open.write('<BR>')

# Created-with-thc notice
file_open.write(texts.createdWithNote)
file_open.write('</BODY>\n')
#body end
file_open.write('</HTML>')

file_open.close()
print texts.FileWritten
self.txtOutput.insertPlainText(texts.FileWritten)
self.txtOutput.insertPlainText(texts.Success)

def onShowResult(self):
webbrowser.open_new(self.file_to_write)

def SelectColor(self):
color = QtGui.QColorDialog.getColor()
self.bgColor_R = hex(color.red())[2:].zfill(2)
self.bgColor_G = hex(color.green())[2:].zfill(2)
self.bgColor_B = hex(color.blue())[2:].zfill(2)
self.txtOutput.insertPlainText("\nSelected color (RGB Hex):
%s%s%s" % (self.bgColor_R, self.bgColor_G, self.bgColor_B))

def onFontSizeChanged(self):
self.font_size = horizontalSlider.value()
self.txtOutput.insertPlainText("font size: %s" % self.font_size)

def OpenAbout(self):
abtDialog = abtDialogFrame.ThcAboutDialog()
abtDialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
abtDialog.exec_()

def GoToListickOrg(self):
webbrowser.open_new('http://www.listick.org')

def onQuit(self):
print texts.Quit
self.close()

app = QtGui.QApplication(sys.argv)
mainframe = ThcMainframe()
mainframe.show()
sys.exit(app.exec_())
========================================================================================

Thanks in advance.

Listick
http://www.listick.org
 
B

Bruno Desthuilliers

Florian Wollenschein a écrit :
Hi all,

here's the main code of thc, my txt to html converter. Since I'm a
beginner it is far, far, faaaaaaar away from perfect or even good :)
What could be done better?
(snip code)

1/ decouple the text => html conversion part from your (or any other) GUI

2/ decouple the text => html conversion part from files handling (hint:
given your code, any object having a 'write' method should do - IOW, the
conversion code just a need an object with a "write(somestring)" method
as argument, eventually defaulting to sys.stdout.

3/ write tags in lowercase, and get rid from the 'bgcolor' attribute in
<body>

4/ or even better, use a templating system, to avoid hardcoding html in
your code

Also an FWIW, there are quite a few 'simple markup' text format
(textile, markdown, ReST, various wiki idioms etc). You may want to be
able to use them too.

My 2 cents.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top