Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart  (Přečteno 5612 krát)

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Zdravim

Prave jsem dobastlil jednoduchy dialog na vypnuti/restart pocitace, je to v pythonu a GUI  v glade. Upravil jsm si jeden uz existujici a i tak to byl docela porod. Presto to prekvapive funguje, jsou tu ale dve vecicky :

1. neprisel jsem na zpusob jak zmenit font popsiky tlacitka - treba aby byla popiska tucnym pismem. Label jako takovy se mi podarilo zvetsit kdyz jsem ho vlozil mezi nekolik znacek <big></big> (jak moc na zabiti to je ?  :) ) ale u tlacitka me to nefunguje.

2. po spusteni v terminalu mi to vypsalo nejdriv :
Kód: [Vybrat]
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-enable-event-sounds' of type `gboolean' from rc file value "((GString*) 0x9ff3ab0)" of type `gboolean'
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-enable-input-feedback-sounds' of type `gboolean' from rc file value "((GString*) 0xa087580)" of type `gboolean'
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-button-images' of type `gboolean' from rc file value "((GString*) 0xa087480)" of type `gboolean'
a kdyz jsem kliknul na tlacitko ukončit  tak jsem zase dostal :
Kód: [Vybrat]
Traceback (most recent call last):
  File "/usr/bin/shutdowndialog", line 58, in on_cancel
    gtk.main_quit()()
TypeError: 'NoneType' object is not callable
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 105, in apport_excepthook
    os.O_WRONLY|os.O_CREAT|os.O_EXCL, 0600), 'w')
OSError: [Errno 2] Adresář nebo soubor neexistuje: '/var/crash/_usr_share_shutdown_box_shutdown.py.1000.crash'

Original exception was:
Traceback (most recent call last):
  File "/usr/bin/shutdowndialog", line 58, in on_cancel
    gtk.main_quit()()
TypeError: 'NoneType' object is not callable

Prikladam jeste zdrojovy kod toho skriptu - to ze vypinam/restartuju prez gksudo je prozatimni reseni abych overil funkcnost pisu to jen abyste me na to neupozornovali.
Kód: [Vybrat]
#!/usr/bin/env python
# A littel shutdown menu for openbox
#
# Contact:
# Mayguz@web.de
#
# Requierments:
# pygtk
# sudo
# python
# gtk
#
# Scheduling:
# You need the following entry in the /etc/sudoers file.
# yourUserName ALL=(ALL) NOPASSWD:/sbin/shutdown

import os
import gtk
import gtk.glade
import pygtk
import sys

# Class Commands
class Commands:

def reboot(self):
os.system("/usr/bin/gksudo reboot")

def shutdown(self):
os.system("/usr/bin/gksudo poweroff")

# Class Shutdown gui
class ShutdownGui(Commands):

def __init__(self):
self.gladefile = sys.path[0] + "/shutdown_gui.glade"
self.wTree = gtk.glade.XML(self.gladefile)
self.ShutdownBox = self.wTree.get_widget("ShutdownBox")
self.set_button_signals()

def show(self):
self.ShutdownBox.show_all()

def set_button_signals(self):
button_dictonary = {"on_RebootButton_clicked"   : self.on_reboot,
    "on_ShutdownButton_clicked" : self.on_shutdown,
    "on_CancelButton_clicked" : self.on_cancel}
self.wTree.signal_autoconnect(button_dictonary)


def on_reboot(self, data):
self.reboot()

def on_shutdown(self, data):
self.shutdown()

def on_cancel(self, data):
gtk.main_quit()()


# Main Program
def main():
shutbox = ShutdownGui()
shutbox.show()
gtk.main()

# Script Trick
if __name__ == "__main__":
main()
sys.exit(0)

Budu moc vdecny za radu, delam to pro tenhle projekt tak at je to kdyztak poradne.

diky predem K
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #1 kdy: 21 Dubna 2011, 15:49:43 »
Jednak se můžeš kouknout, jak podobný program řeším řeším já - když klikneš v mém podpisu na ten druhý odkaz, stáhneš odtamtud instalační balík a rozbalíš ho jako archiv, najdeš tam pythonní program.

K tvému skriptu..
Citace
gtk.main_quit()()
druhé závorky jsou navíc
Popisky na tlačítkách nepodporují markup, takže to, co můžeš s klasickým labelem tak jednoduše nejde. Změna fontu vyžaduje v GTK o něco více snahy, než jsem byl zatím, ochoden investovat, jinak ale můžeš dát na tlačítko třeba i obrázek.

Večer se na to kdyžtak podívám víc..

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #2 kdy: 21 Dubna 2011, 16:12:22 »
Diky kouknu se na ty tvoje stranky. Jinak ono vo je docela citelny, mam tam pridelany ikonky, jen by tomu bold font slusel vic.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #3 kdy: 21 Dubna 2011, 18:19:19 »
Jsem říkal, že si můžeš ten můj skript stáhnout a nedošlo mi, že mám data v Libyi,  asi dostali zásah.. :) Dal jsem to jinam.

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #4 kdy: 21 Dubna 2011, 21:53:54 »
Jo diky, dival jsem se na screeny ale nevsiml jsem si jestli nejak upravujes popisky tlacitek. Take podivam se na ten zdrojak.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #5 kdy: 21 Dubna 2011, 22:05:22 »
Tlačítka neupravuju, to tam nenajdeš, ale pokud používáš Glade, měl bys to mít možnost naklikat tam. Myslel jsem spíš, jestli raději nechceš využít služeb power managementu přes dbus, než prznit sudoers.

Do tlačítka můžeš vložit další objekt, když tam vložíš label, můžeš použít markup.
« Poslední změna: 21 Dubna 2011, 22:30:26 od GdH »

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #6 kdy: 22 Dubna 2011, 14:59:47 »
No to se rad podivam i kdyz uz sme to resili tady. Akorat ze to bude muset pockat, prvne jsem ted o velikonocich na cestach a za dalsi jsem si vcera chtel zahrat ...  ;) - podrobnosti jsou tady
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #7 kdy: 22 Dubna 2011, 15:23:10 »
No to se rad podivam i kdyz uz sme to resili tady.

Spouštět shellové příkazy z Pythonu jsem na mysli neměl.

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #8 kdy: 02 Května 2011, 16:10:08 »
Tak jsem si po velikonocich konecne nasel cas a musim se priznat, ze se v tom kodu neorientuju natolik, abych pochopil jak si poresil to vypinani a restart. Mohl by si treba uvest nejaky minimalni kod pro vypnuti/reset pomoci Dbus ? Nebo je to nekde na internetu dobre popsane odkud jsi cerpal?
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #9 kdy: 02 Května 2011, 17:00:27 »
Kód: [Vybrat]
# příprava
import dbus
from dbus.mainloop.glib import DBusGMainLoop

dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)

proxy = bus.get_object("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager")
PM = dbus.Interface(proxy, "org.freedesktop.ConsoleKit.Manager")

# akce

PM.Stop() # vypnutí

PM.Restart() # restart
« Poslední změna: 04 Května 2011, 09:57:27 od GdH »

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #10 kdy: 03 Května 2011, 09:22:06 »
Diky moc - vyzkousim az budu mit vecer cas.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #11 kdy: 04 Května 2011, 09:20:11 »
Tak jsem to uvedl do funkcni podoby, ale musel jsem udelat par zmen :
- pridat radek from dbus.mainloop.glib import DBusGMainLoop

- zmenit SessionBus na SystemBus

Tak prikladam ten muj vytvor jestli to neni nejaka moc velka prasarna :
Kód: [Vybrat]
#!/usr/bin/env python
# A littel shutdown menu for openbox
#
# Requierments:
# pygtk
# sudo
# python
# gtk

#import os
import gtk
import gtk.glade
import pygtk
import sys
import dbus
from dbus.mainloop.glib import DBusGMainLoop

dbus_loop = DBusGMainLoop()
#bus = dbus.SessionBus(mainloop=dbus_loop)
bus = dbus.SystemBus(mainloop=dbus_loop)
proxy = bus.get_object("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager")
PM = dbus.Interface(proxy, "org.freedesktop.ConsoleKit.Manager")

# Class Commands
class Commands:

def reboot(self):
PM.Restart() # restar

def shutdown(self):
PM.Stop() # shutdown

# Class Shutdown gui
class ShutdownGui(Commands):

def __init__(self):
self.gladefile = sys.path[0] + "/shutdown_gui.glade"
self.wTree = gtk.glade.XML(self.gladefile)
self.ShutdownBox = self.wTree.get_widget("ShutdownBox")
self.set_button_signals()

def show(self):
self.ShutdownBox.show_all()

def set_button_signals(self):
button_dictonary = {"on_RebootButton_clicked"   : self.on_reboot,
    "on_ShutdownButton_clicked" : self.on_shutdown,
    "on_CancelButton_clicked" : self.on_cancel}
self.wTree.signal_autoconnect(button_dictonary)


def on_reboot(self, data):
self.reboot()

def on_shutdown(self, data):
self.shutdown()

def on_cancel(self, data):
gtk.main_quit()


# Main Program
def main():
shutbox = ShutdownGui()
shutbox.show()


gtk.main()

# Script Trick
if __name__ == "__main__":
main()
sys.exit(0)

Zkusim pripadne jeste pridat par try/catch tak jak v tom tvem skriptu. Kazdopadne aspon nejak to funguje, diky moc za vse K
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #12 kdy: 04 Května 2011, 09:54:50 »
Tak to vidíš, práce kvapná málo platná. Měls to i s hádankou, omlouvám se. Já tam používám i session bus a zkopíroval jsem holt něco jiného, než jsem měl, nehledě na ten zapomenutý import.. fuj

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #13 kdy: 04 Května 2011, 13:52:44 »
Nic se nedeje, stejnak diky za pomoc. Jsem rad ze k tomu nemas dalsi pripominky, ja sem s tim jak to funguje spokojenej a hlavne rad ze mam dalsi vec poresenou.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #14 kdy: 04 Května 2011, 22:52:27 »
Class Commands je tu zbytečná a Littel is a Dutch surname  :)
Dej sem i ten glade soubor, ať to vidím komplet.

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #15 kdy: 07 Května 2011, 11:26:02 »
 ;D
To prvni nevim a to druhe je preklep. Ale prevzal jsem ten kod odnekud z internetu tak mozna to ani neni muj preklep.
Hodil sem to sem : http://www.uloz.to/8903458/shutdown-box-tar-gz
Kazdopadne diky ! budu moc rad za jakoukoliv revizi. Ale jak rikam - svuj ucel to plni prekvapive dobre.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #16 kdy: 07 Května 2011, 13:24:18 »
To tvé okno se mi na Ubuntu 10.04 ani nezobrazilo, tak jsem udělal nové, univerzálnější, doladit si ho můžeš podle sebe. Taky jsem trochu zjednodušil ten kód. Máš to v příloze, txt koncovka je tam samozřejmě jen kvůli uploadu sem.

[attachment deleted by admin]
« Poslední změna: 07 Května 2011, 13:58:22 od GdH »

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #17 kdy: 07 Května 2011, 14:43:01 »
Diky, no me se ten puvodni kod taky zdal trochu moc slozitej, ale nestoural sem se v tom. Jeden problemek ale vznik - to puvodni okenko si zachovalo svou velikost a zobrazovalo se uprostred obrazovky. Ted je ale pravdepodobne "resizable" coz se pro muj ucel vubec nehodi. Myslim ze bych mel ale prijit na to jak to opravit - predpokladam ze v nejakem nastaveni v glade ?
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #18 kdy: 07 Května 2011, 14:51:43 »
Diky, no me se ten puvodni kod taky zdal trochu moc slozitej, ale nestoural sem se v tom. Jeden problemek ale vznik - to puvodni okenko si zachovalo svou velikost a zobrazovalo se uprostred obrazovky. Ted je ale pravdepodobne "resizable" coz se pro muj ucel vubec nehodi. Myslim ze bych mel ale prijit na to jak to opravit - predpokladam ze v nejakem nastaveni v glade ?

Je to v glade, naklikat si tam můžeš co chceš, momentálně se okno zobrazí u kurzoru myši.

Edit: máš to v příloze upravené, s jednou změnou navíc, po vzoru ubuntího menu.

[attachment deleted by admin]
« Poslední změna: 07 Května 2011, 15:20:28 od GdH »

karlitos

  • Závislák
  • ****
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • Zobrazit profil
    • homepage
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #19 kdy: 08 Května 2011, 10:54:31 »
Perfektni, jen co bude cas kouknu se jak si udelal ten tucnej font na tech tlacitkach, kazdopadne diky za vese !
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
« Odpověď #20 kdy: 08 Května 2011, 11:18:32 »
Perfektni, jen co bude cas kouknu se jak si udelal ten tucnej font na tech tlacitkach, kazdopadne diky za vese !

Jak už jsem psal, do tlačítka můžeš vložit v podstatě libovolný další objekt. Tady jsem do nich vložil hbox se dvěma sloupci, do kterých jsem zas vložil image s dialogovou velikostí a label. A protože gtk.label() implementuje i Pango Markup Language, můžeš použít tagy <b></b>, <big></big>, a další.

 


Provoz zaštiťuje spolek OpenAlt.