[Python/pyGTK] Borderless windows & PNG-24?

Pagina: 1
Acties:

  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
Beste mede-tweakers,
Ik ben sinds kort van start gegaan met python. :)

Aangezien ik binnen een project de grafische kant moet verzorgen heb ik Glade gedownload (samen met python/pyGTK/etc) en ben ik op internet tutorialletjes gaan lezen/volgen.

Dit is allemaal leuk, maar ik wil uiteraard (net als dat ik gewend ben met visual studio) een soort sleur en pleur omgeving waar ik de layout van de applicatie in elkaar kan zetten.

Nu is er dus Glade, waarmee je in de richting komt. Alleen Glade werkt met een hele rare manier, je kunt items niet slepen oid en ze zijn standaard 'container-vullend'. Dit is dus al mijn eerste vraagtekenpunt. Is er geen andere editor of is dit anders mischien aan te passen o.i.d.?

Tevens kan ik met Glade wel een widget maken die geen border heeft (dus niet de titelbalk erin en het bordertje eromheen, of zoals glade het noemt "Geen versiersels"). Maar dan heb ik nog steeds een grijze achtergrondskleur. :'(

Wat mijn uiteindelijke doel is, is om een applicatie te maken met een plaatje op de achtergrond, dit is een png (24 bits). met een schaduw,

1. PNG-24 pakt dat hele pyGTK niet
2. Ik kan die achtergrond niet wegkrijgen waardoor ik uberhaupt een png-24 met alpha mooi kan laten zien.

Zelf heb ik gezocht op google, op tweakers zelf en ben ik veel manuals e.d. doorgespit. Maar ik kan niks vinden wat mijn vragen beantwoord...

Iemand tips hoe ik dit aan het werk kan krijgen? :>

Oost west, 127.0.0.1 best!


  • Johnny
  • Registratie: December 2001
  • Laatst online: 01-12 14:49

Johnny

ondergewaardeerde internetguru

Geen tips, maar een PNG met alpha heeft 4 kanalen rood, groen, blauw en transparant die ieder 8 bits hebben, dus is 32-bits en niet 24-bits.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
Johnny schreef op donderdag 05 april 2007 @ 01:32:
Geen tips, maar een PNG met alpha heeft 4 kanalen rood, groen, blauw en transparant die ieder 8 bits hebben, dus is 32-bits en niet 24-bits.
Mijn fout dan, photoshop beschrijft hem hier als png-24 (waarvan ik veronderstelde dat dat 24 bits was). Anyhow, ik probeer nog info in te winnen maar no luck tot zover. Iemand?

Oost west, 127.0.0.1 best!


  • mithras
  • Registratie: Maart 2003
  • Niet online
Het is geen click & pleur zoals MS Visual Studio. Er is goed over nagedacht door de gtk developpers (en het ligt dus niet aan Glade ;)), maar je moet je applicatie dus opdelen in horizontale en verticale vlakken. In plaats van een canvas van x bij y pixels ben je zo veel flexibeler.

Als je het venster vergroot zullen dan delen meevergroten, en andere delen de vaste hoogte / breedte behouden. Het is een andere instelling, maar zeker niet slecht ofzo :)

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Je bedoelt gewoon Layoutmanagement? Wat ook in Visual Studio zit zeg maar :+

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • mithras
  • Registratie: Maart 2003
  • Niet online
kenneth schreef op donderdag 05 april 2007 @ 11:46:
Je bedoelt gewoon Layoutmanagement? Wat ook in Visual Studio zit zeg maar :+
Weet ik veel, ik ken alleen maar *nices, dus Glade als vergelijkbare voor gtk als velen visual studio gebruiken. Ik ken VS alleen bij naam zegmaar ;)

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

't Is wel een mooi idee, layout management. Swing gebruikt het ook, en goed om te zien dat Glade het ook doet :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
mithras schreef op donderdag 05 april 2007 @ 11:34:
Het is geen click & pleur zoals MS Visual Studio. Er is goed over nagedacht door de gtk developpers (en het ligt dus niet aan Glade ;)), maar je moet je applicatie dus opdelen in horizontale en verticale vlakken. In plaats van een canvas van x bij y pixels ben je zo veel flexibeler.

Als je het venster vergroot zullen dan delen meevergroten, en andere delen de vaste hoogte / breedte behouden. Het is een andere instelling, maar zeker niet slecht ofzo :)
Tja, dat vind ik nu net tamelijk vervelend. Ik vind het juist makkelijk om gewoon de window te zien en precies dingen pixel perfect erin te zetten.

(net zoals ik liever werk met div's dan met tables...) ;)

Oost west, 127.0.0.1 best!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
Maar goed, als dat niet kan, jammer. dan moet ik maar daarmee uit de voeten gaan. hoe dan ook, de andere problemen nog. Hoe kan ik ( om een makkelijk voorbeeld te noemen) bijvoorbeeld een png met alpha channel weergeven middenop mijn scherm. zonder window of background er omheen.

Oost west, 127.0.0.1 best!


  • user109731
  • Registratie: Maart 2004
  • Niet online
Ik was ook Visual Studio gewend, het is idd even wennen, maar als je eenmaal GTK doorhebt werkt het erg pretting :)

Over je tweede vraag, PyGTK heeft ook documentatie hoor :) set_decorated kun je gebruiken om je window borders te verbergen, hier een simpel voorbeeldje, laat onder Ubuntu netjes een window zien met een gat erin:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python

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

class Base:
    def __init__(self):
        self.window = gtk.Window()
        
        pixbuf = gtk.gdk.pixbuf_new_from_file("./test.png")
        pixmap, mask = pixbuf.render_pixmap_and_mask()
        width, height = pixmap.get_size()
        
        self.window.set_app_paintable(True)
        self.window.set_decorated(False)
        self.window.resize(width, height)
        self.window.realize()
        
        self.window.shape_combine_mask(mask, 0, 0)  # make it transparent       
        self.window.window.set_back_pixmap(pixmap, False)
        self.window.show()
        
    def main(self):
        gtk.main()

if __name__ == "__main__":
    base = Base()
    base.main()

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

geerttttt schreef op donderdag 05 april 2007 @ 12:02:
[...]


Tja, dat vind ik nu net tamelijk vervelend. Ik vind het juist makkelijk om gewoon de window te zien en precies dingen pixel perfect erin te zetten.
Tot een gebruiker beslist (en ja, dat is aan de gebruiker) om ipv 10pt opeens een 14pt-font te gebruiken. Absolute positionering werkt in maar één situatie, relatieve in meerdere.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
JanDM schreef op donderdag 05 april 2007 @ 12:14:
Ik was ook Visual Studio gewend, het is idd even wennen, maar als je eenmaal GTK doorhebt werkt het erg pretting :)

Over je tweede vraag, PyGTK heeft ook documentatie hoor :) set_decorated kun je gebruiken om je window borders te verbergen, hier een simpel voorbeeldje, laat onder Ubuntu netjes een window zien met een gat erin:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python

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

class Base:
    def __init__(self):
        self.window = gtk.Window()
        
        pixbuf = gtk.gdk.pixbuf_new_from_file("./test.png")
        pixmap, mask = pixbuf.render_pixmap_and_mask()
        width, height = pixmap.get_size()
        
        self.window.set_app_paintable(True)
        self.window.set_decorated(False)
        self.window.resize(width, height)
        self.window.realize()
        
        self.window.shape_combine_mask(mask, 0, 0)  # make it transparent       
        self.window.window.set_back_pixmap(pixmap, False)
        self.window.show()
        
    def main(self):
        gtk.main()

if __name__ == "__main__":
    base = Base()
    base.main()
Afgezien van dat ik dat stukje code zo even ga testen (dank daarvoor) ken ik set decorated al. Dat haalt dus de border weg, maar wat mijn doel is, om niet die achtergrondskleur erin te hebben zodat ik een png met alpha als 'border' om de window kan gebruiken, tevens met schaduw achter het venster etc.

Volgensmij is dat niet wat dit stuke code maakt. maar ik ga het even testen...


Dit is toch wel zonder achtergrond en alles. 2 nadelen echter.
1. Dit is geen glade, om nu alles tekstmatisch te programmeren waar het moet komen vind ik stiekem wat te lastig en vervelend.
2. Ik probeer (ook gezocht...) bij de png-24 die wel werkt een alpha toe te voegen, maar dit pakt ie heleaas niet...

[ Voor 8% gewijzigd door geerttttt op 05-04-2007 17:07 ]

Oost west, 127.0.0.1 best!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
Ik heb het nu wel mogelijk om in glade png-24 te gebruiken, dat werkt prima allemaal. Dus blijven we over met slechts 1 probleem. Hoe krijg ik in glade die geel/grijze achtergrond weg zodat ik gebruik kan maken van mijn schaduw in mijn pngtje.

Oost west, 127.0.0.1 best!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
Niemand een antwoord?

Oost west, 127.0.0.1 best!


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Ik snap je probleem niet helemaal. Wil je dat je de desktop kan zien door de doorzichtige delen van de PNG? En dat er ook nog delen van de PNG half doorzichtig zijn (de schaduwen? Dat doe je zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
    screen = widget.get_screen()
    colormap = screen.get_rgba_colormap()
    if colormap == None:
        print 'Your screen does not support alpha channels!'
        colormap = screen.get_rgb_colormap()
        supports_alpha = False
    else:
        print 'Your screen supports alpha channels!'
        supports_alpha = True

    # Now we have a colormap appropriate for the screen, use it
    widget.set_colormap(colormap)


Nu kun je het alpha-kanaal gebruiken. Ik weet niet of je meteen een PNG op de widget kan plakken, maar in elk geval werkt transparantie nu wel via Cairo. De code van Jan werkt met een pixmap, waarbij elke pixel alleen vollledig transparant is of ondoorzichtig. Met bovenstaande code kun je vensters maken die deels transparant zijn, zoals:

Afbeeldingslocatie: http://kfe.fjfi.cvut.cz/~potocek/work/storage/ru.png

[ Voor 24% gewijzigd door writser op 09-04-2007 18:01 ]

Onvoorstelbaar!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
gek genoeg krijg ik de melding dat mijn scherm de alpha channels niet ondersteund...

Oost west, 127.0.0.1 best!


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Dat kan kloppen. Werkt namelijk alleen met nieuwe compositors, dus als je XGL of AIGLX draait. Onder de oude 'X' is het voorzover ik weet met GTK+ niet mogelijk om transparantie-effecten te krijgen. Kijk maar naar de 'transparante' gnome-terminal. Dat is gewoon een hack waardoor je je desktop-achtergrond krijgt te zien. Echte transparantie zit er niet in.

Onvoorstelbaar!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
writser schreef op maandag 09 april 2007 @ 22:56:
Dat kan kloppen. Werkt namelijk alleen met nieuwe compositors, dus als je XGL of AIGLX draait. Onder de oude 'X' is het voorzover ik weet met GTK+ niet mogelijk om transparantie-effecten te krijgen. Kijk maar naar de 'transparante' gnome-terminal. Dat is gewoon een hack waardoor je je desktop-achtergrond krijgt te zien. Echte transparantie zit er niet in.
Hm, tja ik test/develop hier hem onder windows. De bedoeling is uiteindelijk dat hij multiplatform overal goed gaat werken. Tevens zitten we nog te overwegen om het toch niet met Python te gaan maken maar met een andere taal, maar GTK zit je toch wel aan vast denk ik...

Oost west, 127.0.0.1 best!


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

writser schreef op maandag 09 april 2007 @ 22:56:
Dat kan kloppen. Werkt namelijk alleen met nieuwe compositors, dus als je XGL of AIGLX draait. Onder de oude 'X' is het voorzover ik weet met GTK+ niet mogelijk om transparantie-effecten te krijgen. Kijk maar naar de 'transparante' gnome-terminal. Dat is gewoon een hack waardoor je je desktop-achtergrond krijgt te zien. Echte transparantie zit er niet in.
Dat ligt meer aan gnome-terminal dan aan X op dit moment. Met RENDER kun je al een tijdje een echt transparant effect krijgen, zij het minder werkbaar dan XGL/AIGLX.

TS wil overigens allerlei dingen die niet echt kunnen (voor de meeste mensen) en bovendien 99% van de tijd onder "Bad UI" vallen, dus mischien moet 'ie van het idee afgepraat worden :P

All my posts are provided as-is. They come with NO WARRANTY at all.


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Ik wou het niet melden, maar inderdaad .. :P En als je toch transparantie moet hebben, gebruik dan geen PNG als achtergrond, dat is niet schaalbaar.

Onvoorstelbaar!


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 24-11 16:58

geerttttt

Manisch positief

Topicstarter
CyBeR schreef op dinsdag 10 april 2007 @ 13:36:
[...]


Dat ligt meer aan gnome-terminal dan aan X op dit moment. Met RENDER kun je al een tijdje een echt transparant effect krijgen, zij het minder werkbaar dan XGL/AIGLX.

TS wil overigens allerlei dingen die niet echt kunnen (voor de meeste mensen) en bovendien 99% van de tijd onder "Bad UI" vallen, dus mischien moet 'ie van het idee afgepraat worden :P
Ik wil gewoon een venster met een png als ondergrond, zonder venster of background er omheen. En die png moet dus transparantie (alpha ) kunnen gebruiken. Dat lijkt me niet zo'n gek idee, danwel onhaalbaar. Of ben ik plots beland in windows 3.1?

Oost west, 127.0.0.1 best!


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Waarom wil je per se die transparantie hebben? Kijk eens rond op een willekeurige bak (Windows danwel Linux). Hoeveel transparante vensters kun je vinden? Niet veel schat ik. Daar is een hele goede reden voor: de gemiddelde gebruiker hoeft helemaal geen transparantie. Als er gegevens in een transparant venster staan is de doorzichtigheid irritant, want het maakt het venster minder leesbaar. En als er niks in je venster staat kun je net zo goed je venster kleiner maken. Kun je ook zien wat er achter zit, zonder dat je eerst door een ander venster heen moet kijken.

Dit lijkt me typisch zo'n probleem dat helemaal geen probleem is .. :P Maak gewoon je programma in GTK+, kijk later of mensen uberhaupt zitten te wachten op al je eye candy. Ben wel benieuwd wat je wil gaan maken ..

Onvoorstelbaar!


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

writser schreef op donderdag 12 april 2007 @ 22:51:
Waarom wil je per se die transparantie hebben?
Hij heeft het over widgets. logisch dan toch lijkt me :?

Stop uploading passwords to Github!

Pagina: 1