Gehen die border-styles nicht überall?

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich habe einen Pi3 und pyqt5.

Da habe ich mal die border stile für einen Label probiert. Aber ridge, outset, inset und groove gehen nicht. Woran könnte das liegen?

Bild

Anmerkung: wenn ich pyqt5 starte bekomme ich immer diese Meldung: libEGL warning: DRI2: failed to authenticate
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sieht so aus, als ob da etwas fehlt. Es könnten images für die borders sein, die da fehlen. Vielleicht etwas nicht installiert?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Naja, ich probier dann mal eine Installation von Source Code
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich glaube ich lasse das mit dem Raspberry sein. Zwei Tage Compilierzeit, dazu habe ich keinen Bock. Vielleicht später mal, ein neues Raspberry Image mittels Crosscompiling machen.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Damit diese Border Stile ein sinnvolles Resultat liefern muss border-color sinnvoll gesetzt sein.

Berauschend ist das Resultat allerdings nicht:

Bild

Hier bei background-color '#d9d9d9' und border-color '#8f8f91'

Im Vergleich dazu tkinter:

Bild

Das ist klar und deutlich zu sehen. Weiß jetzt auch nicht, wieso das jetzt in qt wesentlich 'moderner' sein soll und tkinter 'altmodisch' sei.

Man kann natürlich in qt schöner gestalten, etwa abgerundete Ecken, Farbverlauf und border-images, wenn man sich mehr Mühe gibt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Es sollte aber doch gehen:

Bild
Siehe: https://www.w3.org/TR/css3-background/#ridge

Muß man da dann die die 4 Seiten getrennt angeben?
border-top, border-right, border-bottom, border-left

Laut dieser Definition geht es aber doch nicht:

‘groove’
Looks as if it were carved in the canvas. (This is typically achieved by creating a “shadow” from two colors that are slightly lighter and darker than the ‘border-color’.)

Denn da heißt es 'slightly'
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Man muss eben mit der Border Color etwas rumspielen, dann geht es noch ein wenig besser. Hier habe ich dann eine hellere Farbe genommen #b0b0b0

Bild

Schön wäre allerdings, wenn man die dunkle Schattenfarbe dunkler machen könnte. Bei outset und inset könnte man ja die Seiten getrennt setzen. Bei ridge und groove geht das allerdings nicht.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Das war mein erstes Qt Programm. Da bin ich noch ein Anfänger:

Code: Alles auswählen

#import tkinter as tk
import QtTk as tk

class Application(tk.Tk):
    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        
        self.title('Hello World')

        widget = tk.Label(self,text="none",relief='flat',bd=5, bg = '#d9d9d9', fg = 'black')
        widget.grid(row=0,column=0)

        widget = tk.Label(self,text="solid",relief='solid',bd=5, bg = '#d9d9d9', bordercolor = 'black', fg = 'black')
        widget.grid(row=0,column=1)

        widget = tk.Label(self,text="ridge",relief='ridge',bd=5, bg = '#d9d9d9', bordercolor = '#a8a8a8', fg = 'black')
        widget.grid(row=0,column=2)

        widget = tk.Label(self,text="outset",relief='raised',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
        widget.grid(row=1,column=0)

        widget = tk.Label(self,text="inset",relief='sunken',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
        widget.grid(row=1,column=1)

        widget = tk.Label(self,text="groove",relief='groove',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
        widget.grid(row=1,column=2)

Application().mainloop()
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was ist denn `QtTk` für ein Modul zur Anbindung von Python an Qt? Mir ist bis dato nur PyQt und PySide bekannt...

Gruß, noisefloor
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oh Gott du hast gefragt.... es ist natürlich der Versuch auch Qt mit seinem GUI-Builder zu verhackstücken.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

noisefloor hat geschrieben:Hallo,

was ist denn `QtTk` für ein Modul zur Anbindung von Python an Qt? Mir ist bis dato nur PyQt und PySide bekannt...

Gruß, noisefloor
Das ist ein Modul, das habe ich aber nocht nicht fertig - sondern es steht noch am Anfang - welches tkinter durch Qt emuliert. Der Sinn wäre, tkinter Programme unter Qt auszuführen und dann auch deren GUI nach Qt zu konvertieren. Da ich auch fast die tcl/tk Konvertierung nach tkinter fertig habe, könnte man dann auch eine tcl/tk GUI nach Qt konvertieren.
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Oh Gott du hast gefragt...
Ja - hätte ja theoretisch auch ein C&P Fehler sein können.
Der Sinn wäre, tkinter Programme unter Qt auszuführen und dann auch deren GUI nach Qt zu konvertieren.
Aha, thx. Stell' ich mir zwar schwierig vor, weil Qt im Kern ja konzeptionell einige Sachen anders macht als Tk, aber gut. Jeder kann ja Projekte Programmieren, wie er lustig ist.

Machst du das danach auch für GTK, wenn du mit Qt fertig bist?

Gruß, noisefloor
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

noisefloor hat geschrieben:
Der Sinn wäre, tkinter Programme unter Qt auszuführen und dann auch deren GUI nach Qt zu konvertieren.
Aha, thx. Stell' ich mir zwar schwierig vor, weil Qt im Kern ja konzeptionell einige Sachen anders macht als Tk, aber gut. Jeder kann ja Projekte Programmieren, wie er lustig ist.

Machst du das danach auch für GTK, wenn du mit Qt fertig bist?

Gruß, noisefloor
Habe mich noch nicht entschieden, daraus ein Projekt zu machen. Zwischen tkinter und Qt gibt es doch konzeptionelle Unterschiede, man kann nicht einfach tkinter nach Qt konvertieren, sodass es dann genauso aussieht.

Da sind bei grid Unterschiede. Bei Qt beudetet rowStretch nicht, dass die Zeile nicht wächst. rowStretch 0 verhält sich also so, als ob in tkinter weight 1 gesetzt wäre. Dann gibt es Unterschiede beim sticky, das dann in Qt mit QAlignment nicht vollständig umzusetzen ist. Die Nord Süd Ausdehnung, wie etwa bei sticky 'nswe' gibt es da nicht. Man muss solche Sachen dann nachbearbeiten, indem man dann eben die Höhe der Widgets setzt oder die Größe des Grid Layouts anpaßt. Und auch beim Relief muß man nachbearbeiten, indem man eine passende border color ausfindig macht.

Vielleicht schaue ich mir als Nächstes auch mal GTK an, ob damit eine vollständigere Emulierung des Layouts möglich wäre.
Antworten