Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: karlitos 21 Dubna 2011, 13:54:34

Název: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 21 Dubna 2011, 13:54:34
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 (http://forum.ubuntu.cz/index.php/topic,54779.0.html) tak at je to kdyztak poradne.

diky predem K
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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..
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 22 Dubna 2011, 14:59:47
No to se rad podivam i kdyz uz sme to resili tady (http://forum.ubuntu.cz/index.php/topic,54739.0.html). Akorat ze to bude muset pockat, prvne jsem ted o velikonocich na cestach a za dalsi jsem si vcera chtel zahrat ...  ;) - podrobnosti jsou tady (http://forum.ubuntu.cz/index.php/topic,55332.0.html)
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 22 Dubna 2011, 15:23:10
No to se rad podivam i kdyz uz sme to resili tady (http://forum.ubuntu.cz/index.php/topic,54739.0.html).

Spouštět shellové příkazy z Pythonu jsem na mysli neměl.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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?
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 03 Května 2011, 09:22:06
Diky moc - vyzkousim az budu mit vecer cas.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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 (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.
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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]
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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 ?
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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]
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: karlitos 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 !
Název: Re: dotaz k pyGTK/glade kvuli vytvoreni dialogu na vypnuti/restart
Přispěvatel: GdH 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 (http://www.pygtk.org/docs/pygtk/pango-markup-language.html), můžeš použít tagy <b></b>, <big></big>, a další.