* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

my qt-oblogout no funciona

No se si este sea el canal correcto ,sin pues ustedes me van a corregir estoy tratando de usar un oblogout hecho en pyqt(por mi). http://twitpic.com/7yhjj7
La salvedad es que no me funcionan los botones de Salir,Reiniciar,Apagar solo me funciona el de cancelar, Yo uso como escritorio KDE pero de vez en cuando uso openbox y como no pude configurar el oblogout temeable decidi hacer este sencillo sacado de uno hecho en pygtk. No me da ningun error asi que que no se por donde entrarle,estaran mal hechas las funciones? o acaso no las estoy imbocando bien?
Alguna pista?
se les agradece y feliz año para todos.-

Este es el cod.

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

import sys
import os
from PyQt4 import QtGui, QtCore, Qt

class Qtlogout(QtGui.QMainWindow):

def logout(self, widget):
os.system("openbox --exit")

def reboot(self, widget):
os.system("reboot -i")

def poweroff(self, widget):
os.system("poweroff -i")

def __init__(self):
super(Qtlogout, self).__init__()
self.setWindowTitle('Qt-logout')
self.setWindowIcon(QtGui.QIcon("xsystem.png"))
self.resize(420, 100)
self.setMinimumSize(420,100)
self.setMaximumSize(420,100)

self.setStyleSheet("background-color: rgba(255, 0, 0, 75%);")
#self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)

#creando el boton Cancelar
self.buttonA = QtGui.QPushButton('&Cancelar', self)
self.buttonA.setGeometry(20,30,50,50)
self.buttonA.resize(80,50)
self.connect(self.buttonA, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT("close()"))

#Creando el boton salir
self.buttonB = QtGui.QPushButton('&Salir', self)
self.buttonB.setGeometry(120,30,50,50)
self.buttonB.resize(80,50)
self.connect(self.buttonB, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT("logout"))

#Creando el boton Reiniciar
self.buttonC = QtGui.QPushButton('&Reiniciar', self)
self.buttonC.setGeometry(220,30,50,50)
self.buttonC.resize(80,50)
self.connect(self.buttonC, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT("reboot"))

#Creando el boton Apagar
self.buttonD = QtGui.QPushButton('&Apagar', self)
self.buttonD.setGeometry(320,30,50,50)
self.buttonD.resize(80,50)
self.connect(self.buttonD, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT("poweroff"))

def main():
app = QtGui.QApplication(sys.argv)
win = Qtlogout()
win.show()
app.exec_()

if __name__ == "__main__":
main()

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.


Gravatar de kapyderi

# 116897 Veamos...

Si mandas una señal a una orden directa definida en el Slot, deberias ponerlo entre (), a mi de otra forma nunca me ha funcionado, pero si donde pones "logout", por ejemplo, creas un void que se llame "logout()", luego en esa función llamada...

void logout();
close();
system("logout");

se pone close() primero para que cierre tu programa si es lo que quires, y luego llame al system para hacer logout (con las otras funciones es similar).y asi deberia de funcionar, por lo menos en C++... solo tienes que adaptar tu codigo a Phyton, con la idea general de lo que te he expuesto.

No he utilizado python, sino C++ y se hace asi.

Exactamente asi...

void recoverdrake::on_actionReiniciar_equipo_triggered()
{
this->Refrescar();
int respuesta = 0;
if (Mensaka!="Activo")
{
respuesta = QMessageBox::question(this, QString::fromUtf8(tr("Reiniciar sistema")),
QString::fromUtf8(tr("

Reiniciar sistema

"

"Puede pasar que no podamos apagar o reiniciar el "
"equipo por que no aparecen los botones correspondientes "
"o en su defecto, fallan.

"

"Con esta utilidad puedes reiniciar el sistema sin peligro, "
"ya que antes de hacerlo, deja todos los procesos cerrados.

"

"¿Reiniciar sistema?")), QMessageBox::Ok, QMessageBox::No);
}
else
{
respuesta=QMessageBox::Ok;
}
if (respuesta == QMessageBox::Ok){
system("reboot");}
}

//--otra--//

void recoverdrake::on_actionApagar_equipo_triggered()
{
this->Refrescar();
int respuesta = 0;
if (Mensaka!="Activo")
{
respuesta = QMessageBox::question(this, QString::fromUtf8(tr("Apagar sistema")),
QString::fromUtf8(tr("

Apagar sistema

"

"Puede pasar que no podamos apagar o reiniciar el "
"equipo por que no aparecen los botones correspondientes "
"o en su defecto, fallan.

"

"Con esta utilidad puedes apagar el sistema sin peligro, "
"ya que antes de hacerlo, deja todos los procesos cerrados.

"

"¿Apagar sistema?")), QMessageBox::Ok, QMessageBox::No);
}
else
{
respuesta=QMessageBox::Ok;
}
if (respuesta == QMessageBox::Ok){
system("halt");}
}

En la de cancelar, no te falla porque le has pasado una funcion close(), que esta definida directamente en las librerias de QT.

Comentas...

Saludos!!!

Linux es como el Barça...lo tiene todo para ser el número uno
Registered Linux user #472290
MiniBOFH 2008 - MediumBOFH - KapyBOFH - Utiliza RecoverDrake!! (Proyecto Derix)



Gravatar de source_reloaded

# 117018 Gracias por la repuesta.-

Bueno voy a estudiarlo mejor haber que tal me va.- luego comento(esto sera tardado)

Este es uno que baje basado en gtk y funciona bien:

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk
import os

class DoTheLogOut:

# Cancel/exit
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False

# Logout
def logout(self, widget):
os.system("openbox --exit")

# Reboot
def reboot(self, widget):
os.system("reboot -i")

# Shutdown
def shutdown(self, widget):
os.system("poweroff -i")

def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("LogoutSimple:")
self.window.set_resizable(False)
self.window.set_position(1)
self.window.connect("delete_event", self.delete_event)
self.window.set_border_width(20)

# Create a box to pack widgets into
self.box1 = gtk.HBox(False, 0)
self.window.add(self.box1)

# Create cancel button
self.button1 = gtk.Button("Cancel")
self.button1.set_border_width(10)
self.button1.connect("clicked", self.delete_event, "Changed me mind :)")
self.box1.pack_start(self.button1, True, True, 0)
self.button1.show()

# Create logout button
self.button2 = gtk.Button("Log out")
self.button2.set_border_width(10)
self.button2.connect("clicked", self.logout)
self.box1.pack_start(self.button2, True, True, 0)
self.button2.show()

# Create reboot button
self.button3 = gtk.Button("Reboot")
self.button3.set_border_width(10)
self.button3.connect("clicked", self.reboot)
self.box1.pack_start(self.button3, True, True, 0)
self.button3.show()

# Create shutdown button
self.button4 = gtk.Button("Shutdown")
self.button4.set_border_width(10)
self.button4.connect("clicked", self.shutdown)
self.box1.pack_start(self.button4, True, True, 0)
self.button4.show()

self.box1.show()
self.window.show()

def main():
gtk.main()

if __name__ == "__main__":
gogogo = DoTheLogOut()
main()

Marvin Martinez
Mandriva 2010.2 + kde 4.4.5



Gravatar de kapyderi

# 117043 Has probado lo que te dije...

le has puesto () a las funciones?

Comentas...
Saludos!!!!

Linux es como el Barça...lo tiene todo para ser el número uno
Registered Linux user #472290
MiniBOFH 2008 - MediumBOFH - KapyBOFH - Utiliza RecoverDrake!! (Proyecto Derix)



Gravatar de source_reloaded

# 117133 Pero me da error

Seguro que si,pero este es el error que me indica:

Object::connect: No such slot Qtlogout::logout()
Object::connect: No such slot Qtlogout::reboot()
Object::connect: No such slot Qtlogout::poweroff()

Marvin Martinez
Mandriva 2010.2 + kde 4.4.5



Gravatar de kapyderi

# 117135 gtk no es qt...

Tienes que pensar que gtk no es qt a la hora de hacer una aplicación basadas en ellos.

Abre QT-Creator o instalaló si no lo tienes y sobre él, haces el programa de forma grafica. Hay mucha info sobre él en Internet.

Veo que no te deja ya que dice que la conexión no esta echa sobre las funciones void logout(), reboot(), poweroff(), pero para eso tienes que coger el fichero de cabecera .h y en el "private slots:" poner

void logout();
void reboot();
void poweroff();

luego en el source (no se como se llama en python, en C++ es .cpp) tienes que poner la llamada el void para que la conexión se realice.

void TU_FICHERO_CABECERA::logout();
{
system("reboot");
close();
}

y asi con las otras y cuando llames a la conexión que imagino estará conectada a un botón o una opción del menú, llamará al slot logout() y ejecutará la orden, rebotando el sistema y luego cerrando tu programa anfitrión.

Si tienes dudas te puedes pasar por www.zonaqt.com y preguntar ya que yo estoy muy verde en python, ya que utilizo C++.

Comentas...

Saludos!!!

Linux es como el Barça...lo tiene todo para ser el número uno
Registered Linux user #472290
MiniBOFH 2008 - MediumBOFH - KapyBOFH - Utiliza RecoverDrake!! (Proyecto Derix)



Gravatar de source_reloaded

# 117203 Probare y haber que pasa.-

Gracias por las molestia que te tomas en responder, yo tambien estoy verde en Python.Voy probar haciendo la parte grafica con qtdesigner o qtcreator y luego comento, esto si que me llevara mas tiempo del imaginado.

Gracias!!!!

Marvin Martinez
Mandriva 2010.2 + kde 4.4.5

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.