Gerando um código de barras postal(EUA)

From Scribus Wiki
Revision as of 16:51, 7 March 2006 by Ludi (talk | contribs)
Jump to navigation Jump to search
Este artigo é parte da seção de Scripts_e_Plugins.
Scripts para iniciantes Scripts de extensão/PyQt Questões sobre Py Plugins Outros
Voltar para a página principal

Versão em inglês.

Básico

Esse script vai gerar um código de barra postal para o código postal que você fornecer (Serviço de Postágem dos Estados Unidos - USPS). Ele usa o Tkinter para o requisitar um valor. Você pode fornecer números e incluir hifens se desejar, já que qualquer caractere não numérico será ignorado.

O código de barra é um conjunto de linhas criadas de acordo com as especificações do USPS. Esse script criará o código na vertical, ou seja, deixando as linhas na horizontal, dispostas logo no início da página, na posição X = 130 e Y = 130 (em pontos) -- veja as linhas com os comentários Início do X e Início do Y.

Para realocar a posição do código de barras, transforme o código em um grupo, assim você poderá move-lo para qualquer lugar que desejar (você pode usar a janela de propriedades também).

postnet.py

#!/usr/bin/env python

# Arquivo: postnet.py
# criado originalmente 2006.02.26 - Gregory Pittman

import scribus
import Tkinter

class ImageDialog(Tkinter.Toplevel):
    
    def __init__(self, parent):
        Tkinter.Toplevel.__init__(self, parent, bg="#bbbbff")

        Tkinter.Label(self, text='Forneça o Código Postal e clique no OK',bg="#bbbbff").grid(row=0,columnspan=6)

        self.e = Tkinter.Entry(self)
        self.e.grid(row=1,columnspan=6)
        b = Tkinter.Button(self, text='OK', bg="#55ff88", command=self.ok)
        b.grid(row=2,columnspan=6)
        self.protocol("WM_DELETE_WINDOW", self.quit)

    def ok(self):
        S = self.e.get()
        m = Tkinter.Message(root, text=self.e.get()+'\nClose this\n window')
        m.grid(row=0, columnspan=4)
        postcode = ['llsss','sssll','sslsl','sslls','slssl','slsls','sllss','lsssl','lssls','lslss']
        a = 1.44      #largura da linha
        b="Black"     #cor da linha
        relx=130      #Início do X
        rely=130      #Início do Y
        if scribus.haveDoc():
            scribus.setRedraw(1)
            scribus.setUnit(0)
            d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa
            scribus.setLineWidth(a, d)
            scribus.setLineColor(b, d)
            scribus.setFillColor(b, d)
            rely = rely + 3.4
            for x in S[0:]:
               if x.isdigit():
                  xnum = int(x)
                  code = postcode[xnum]
                  for y in code[0:]:
                     if y == 'l':
                        d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa
                        scribus.setLineWidth(a, d)
                        scribus.setLineColor(b, d)
                        scribus.setFillColor(b, d)
                        rely = rely + 3.4
                     elif y == 's':
                        d = scribus.createLine(relx,rely,relx+3.6,rely,) #Linha curta
                        scribus.setLineWidth(a, d)
                        scribus.setLineColor(b, d)
                        scribus.setFillColor(b, d)
                        rely = rely + 3.4
            d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa
            scribus.setLineWidth(a, d)
            scribus.setLineColor(b, d)
            scribus.setFillColor(b, d)
            
            redrawAll()
            self.Tkinter.Toplevel.destroy()

root = Tkinter.Tk()
root.update()
z = ImageDialog(root)
root.wait_window(z)

postnet.py (nova versão)