Jump to content

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


Radosław
 Share

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Takie coś znalazłem o moim. chyba, problemie (taki programik jak mój):

image.png.b73e24c0dd327bff852244323ca4d101.png

A dalej:

image.png.a9d351a5756b0a93942656dd0d16e7e5.png

Czyli to coś z Wayland?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...