Hacer click a un boton para abrir un archivo pdf en python y QT

publicado por: Anonymous

Soy novato programando en Python y mi idea es que al hacer click en el botón que llame “Botonawg” se abra un archivo pdf. Me gustaría que esto funcionara tanto en windows como en sistemas UNIX.

Yo uso GNU-Linux ARCh.
Hice este código pero me da el siguiente error:

NameError: name ‘QtCore’ is not defined.

Código:

import sys
import webbrowser #para abrir archivos
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import uic
"""from PyQt5.QtCore import Qt"""

"""#Clase heredada de QMainWindow (Constructor de ventanas)"""
class Ventana(QMainWindow):
 #Método constructor de la clase
 def __init__(self):
  #Iniciar el objeto QMainWindow
  QMainWindow.__init__(self)
  #Cargar la configuración del archivo .ui en el objeto
  uic.loadUi("MiProyecto.ui", self)
  self.setWindowTitle("Ktronix")

  #Abrir tabla AWG


"""
  def openFile(file):
  if sys.platform == 'linux2':
     subprocess.call(["xdg-open", file])
  else:
     os.startfilefile)

""" 

QtCore.QObject.connect(self.uiself.Botonawg, QtCore.SIGNAL ('clicked()'), webbrowser.open_new(r'/home/ronal/ktronic/awg.pdf'))

Agradecería de su ayuda.

solución

Aparentemente tu error es que no importas el modulo QtCore de PyQt5, ademas recomiendo hacer la conecciones dentro de __init__()

import sys
import subprocess

from PyQt5 import QtCore

from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import uic

"""#Clase heredada de QMainWindow (Constructor de ventanas)"""
class Ventana(QMainWindow):
    #Método constructor de la clase
    def __init__(self):
        #Iniciar el objeto QMainWindow
        QMainWindow.__init__(self)
        #Cargar la configuración del archivo .ui en el objeto
        uic.loadUi("MiProyecto.ui", self)
        self.setWindowTitle("Ktronix")

        QtCore.QObject.connect(self.Botonawg, QtCore.SIGNAL ('clicked()'), this.abrirTabla)

    def abrirTabla(this):
        this.openFile(r'/home/ronal/ktronic/awg.pdf') 

    #Abrir tabla AWG
    def openFile(this, file):
        if sys.platform == 'linux2':
            #Linux detectado
            subprocess.call(["xdg-open", file])
        elif sys.platform == 'darwin':
            #MacOSx detectado
            subprocess.call(["open", file])
        elif sys.platform.startswith('win'):
            #Windows detectado
            subprocess.call(["start", file])

En realidad no existe un comando universal y portable para decirle al sistema operativo que abra un archivo con su aplicacion determinada, sin embargo, estos comandos son muy parecidos. En windows el comando start, para la mayoria de distribuciones linux xdg-open y por ultimo para sistemas Apple con MacOS open.

Editado:
Se eliminó la linea: import webbrowser #para abrir archivos

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *