Skocz do zawartości

KDE Ustawienia, okna na środku, Python z Qt i też okna na środku.


Radosław

Rekomendowane odpowiedzi

Gdy tak ustawię to `.move` dla QMainWindow cz Qwidget nie jest w stanie ustawić okna na wybranej przez mnie pozycji.

Gdy ustawię w KDE: otwieraj okna przypadkowo to pozycjonowanie w Qt przez .move działa.

Czy to normalne? Dla jasności to moje okno Qt mogę przestawić w "Zasadach okien" robiąc regułę, ale to przecież nie o to chodzi.

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

Ale dla okien systemowych, a nie obcych. A nawet niech będzie. Tylko dlaczego funkcja .move(x,y) dla widgetu Qt nie może ich przestawić? Tu leży mój problem. Chcę zrobić sobie prosty toolbwr na boku ekranu i kiszka.

Odnośnik do komentarza
Udostępnij na innych stronach

W ogóle nie pokazałeś nawet linii kodu, więc ciężko stwierdzić co jest nie tak.

U mnie np. taki kod

# importing the required libraries 
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys 

class Window(QMainWindow): 
    def __init__(self): 
        super().__init__() 

        # set the title 
        self.setWindowTitle("Move") 

        # setting the geometry of window 
        self.setGeometry(0, 0, 200, 600) 

        # creating a label widget
        self.widget = QLabel('Label', self)

        # moving the widget
        # move(left, top)
        self.widget.move(50, 50)

        # setting the window position
        self.move(50, 50) 

        # show all the widgets 
        self.show() 

# create pyqt5 app 
App = QApplication(sys.argv) 

# create the instance of our Window 
window = Window() 
# start the app 
sys.exit(App.exec()) 

działa bez problemu (MATE Desktop)

Odnośnik do komentarza
Udostępnij na innych stronach

Mój kod działa jak wyłączę w KDE środkowanie nowo otwartych okien. To wina KDE. Jestem tylko zaskoczony, że działa również na zewnętrzne programy. One sa Qt jak KDE i pewnie dlatego.

Odnośnik do komentarza
Udostępnij na innych stronach

No ciekawe. Odpaliłem F30 na starym dysku. Tam po ustawieniu: wyśrodkowane, w ustawieniach KDE wszystko jest ok. Znaczy się mój program startuje tam gdzie chcę, czyli reaguje na .move(). To oznacza, że nowe KDE z F40 jest w tej kwestii zmienione, wg mnie na gorsze. I zniknęła opcja "Mądre" coby to nie znaczyło. Czekam na opcje "Użyj AI" z wyborem: Meta, Google, OpenAI. ;-D Czyli muszę używać: "Przypadkowe" Czyli mój problem został rozwiązany, albo i nie.

Odnośnik do komentarza
Udostępnij na innych stronach

Generalnie sprawa jest jasna. Wayland nie obsługuje .move() lub .setGeometry() jeśli chodzi o pozycję okna. :-(

Ma się używać pozycji dostarczonych przez Wayland. Środek, krawędzie, przypadkowe. itp.

Mnie jedynie zastanawia jak w KDE w Ustawieniach w Zasadach okien można wymusić przeniesienie danego okna na pozycję (x,y) ? Tak teraz robię. I jeszcze Tkinter jest w stanie pozycjonować właściwie. Więc coś tu nie tego.

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

16 godzin temu, Radosław napisał:

I jeszcze Tkinter jest w stanie pozycjonować właściwie. Więc coś tu nie tego.

Właśnie że ten tego :) Qt oraz PyQt obsługują natywnie Waylanda, Tkinter go nie obsługuje, jest ogarniany przez XWaylanda, więc można w nim w zasadzie wszystko, co w X11. Odpal sobie konsolę debugowania Kwin to zobaczysz różnicę ;) 

qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole

 

16 godzin temu, Radosław napisał:

Ma się używać pozycji dostarczonych przez Wayland. Środek, krawędzie, przypadkowe. itp.

No nie do końca, o tym decyduje window manager – w przypadku KDE jest to Kwin, w przypadku Gnome jest to Mutter i tak dalej. I żeby dodać pikanterii całej sprawie każdy window manager (czy bardziej precyzyjnie wayland compositor) może mieć różny zestaw opcji albo nawet nie mieć ich wcale.

Odnośnik do komentarza
Udostępnij na innych stronach

A jak to się ma do "Zasad okien" i możliwości ustawiania okna tam? I jeśli znasz ten problem to jest jakieś rozwiązanie? Wymusić otwarcie okna QT przez XWayland?

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, Radosław napisał:

Wymusić otwarcie okna QT przez XWayland?

Zmienna

QT_QPA_PLATFORM="xcb"

Jeśli mowa o natywnym Waylandzie to masz tylko dwa wyjścia (albo trzy)

1. poszperać w dokumentacji kwin/plasmy – być może jest to obsługiwane, tylko trzeba się do tego w jakiś sposób odwołać, jeśli okaże się, że faktycznie jest to niemożliwe to zgłosić feature request

2. napisać własnego kompozytora, który będzie miał taką funkcjonalność (plus funkcjonalność kwin, jeśli nadal chciałbyś korzystać z KDE)

3. Skorzystać z layer-shell – w teorii jest on przygotowany pod tworzenie różnego rodzaju paneli, widgetów itp. W jaki sposób w praktyce wykorzystać – nie mam pojęcia, ale odsyłam tu https://invent.kde.org/plasma/layer-shell-qt

Co do samego wykorzystania to poprzez tą zmienną – tylko uwaga mi to otwiera program na pierwszym planie na całym monitorze i w dodatku bez kontrolek sterowania oknem – jedyny sposób zamknięcia to ubicie procesu. No i warto mieć dwa monitory ;) 

QT_WAYLAND_SHELL_INTEGRATION=layer-shell

O więcej mnie nie pytaj, dalej raczej nie będę w stanie pomóc – o problemie usłyszałem dopiero od ciebie, a w dodatku z programowaniem mam niewiele wspólnego – od potrafię napisać prosty skrypt w pythonie czy bashu, ale niewiele więcej ;) 

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

Ustawienie zmiennej działa. Okno się robi tak bardzo X, że nawet ikonkę dostało od X11. Ale pojawiły się problemy przez to, że "wypadło" kwin. Pierwszy to jest na liście przełączania okien (alt + tab), a drugie to lądowało na spodzie. Dla drugiego problemu to:

.setWindowFlags(Qt.Window | Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)

Dzięki za podpowiedzi. Pozostałe są raczej zaawansowane więc nie dla mnie.

Dzięki. Jednak muszę ustawiać za pomocą "Zasad okien". Będę z tym żył.

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 months later...

Wyciągam z tyłów i mam pytanko. Jak przeedytować "Zasady okien" kwin (gdzieś są zapisane?), a następnie odświeżyć?

Ktoś coś wie?

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

Podany sposób działa zadowalająco, ale...

Przeglądam wyniki:

Cytuj

qdbus org.kde.KWin

i głębiej:

Cytuj

qdbus org.kde.KWin /KWin

i zawarte tam metody i się zastanawiam czy jest możliwość zmiany parametru w `Zasady okien` dla `Położenia` z poziomu `qdbus`. Mogę oczywiście programowo to zmienić wczytują plik, podmienić zawartość i zapisać,  a następnie `reconfigure`, ale może jest i na to sposób?

Pozdrawiam

Radek Głębicki

PS.:

Z manuala:

Cytuj

Additionally, qdbus allows you to set, get, or monitor properties exposed by D-Bus objects. You can view the current values of properties, change their values, or listen for changes to specific properties.

Szukam dostępu do `Zasad` i nie mogę znaleźć.

Edytowane przez Radosław
Dodatkowe info
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...