У меня есть приложение wxPython, которое запоминает положение и размеры своих окон, записывая их в файл конфигурации при закрытии и восстанавливая их из файла конфигурации при запуске. Работал без проблем в Windows много лет. Недавно мне пришлось использовать это в Linux. Я попробовал следующие две конфигурации:
#1 MX Linux KDE
Python 3.11.2
wx.__version__
'4.2.0'
KDE Plasma 5.27.5
Kernel 6.1.0-17-amd64
X11
#2 Fedora 40 KDE
Python 3.12.3
wx.__version__
4.2.1
KDE Plasma 6.0.5
Kernel 6.8.10-300.fc40.x86_64
Wayland
В MX Linux все работало примерно так же, как и в Windows. Однако в Fedora я мог получить или установить только ширину и высоту окна, но не его положение в верхнем левом углу: GetPosition() и GetScreenPosition() всегда возвращают (0, 0)< /code>, GetRect() всегда возвращают (0, 0, ширину, высоту). SetPosition() или SetRect() не оказывают видимого влияния на положение окна, хотя SetRect() правильно устанавливает ширину и высоту. Что дает? Некоторые приложения в Fedora 40, похоже, способны запоминать и восстанавливать свою позицию (например, Skype), так что, вероятно, это не системное ограничение. Но как мне сделать это для моего собственного приложения wxPython?
Вот минимальный пример, воспроизводящий поведение, о котором я говорю. Я также заметил, что сообщение EVT_MOVE не обрабатывается в Fedora, что может быть связано с проблемой (не включенной в этот пример).
#!/usr/bin/env python3
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, window_id, title):
wx.Frame.__init__(self, parent, window_id, title)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Show(True)
def ReadSettings(self):
rect = [0, 0, 100, 100]
try:
with open("settings.txt", "r") as f:
rect = [int(s) for s in f.read().split(",")]
except:
pass
self.SetSize(*rect)
def WriteSettings(self):
with open("settings.txt", "w") as f:
f.write(",".join((str(s) for s in self.GetRect())))
def OnClose(self, evt):
self.WriteSettings()
self.Destroy()
app = wx.App(0)
frame = MainWindow(None, -1, "Test")
frame.ReadSettings()
frame.Show(1)
app.MainLoop()
Подробнее здесь: https://stackoverflow.com/questions/785 ... er-wayland
WxPython wx.Frame Get/Set Position не работает в Wayland? ⇐ Linux
-
Anonymous
1716966389
Anonymous
У меня есть приложение wxPython, которое запоминает положение и размеры своих окон, записывая их в файл конфигурации при закрытии и восстанавливая их из файла конфигурации при запуске. Работал без проблем в Windows много лет. Недавно мне пришлось использовать это в Linux. Я попробовал следующие две конфигурации:
#1 MX Linux KDE
Python 3.11.2
wx.__version__
'4.2.0'
KDE Plasma 5.27.5
Kernel 6.1.0-17-amd64
X11
#2 Fedora 40 KDE
Python 3.12.3
wx.__version__
4.2.1
KDE Plasma 6.0.5
Kernel 6.8.10-300.fc40.x86_64
Wayland
В MX Linux все работало примерно так же, как и в Windows. Однако в Fedora я мог получить или установить только ширину и высоту окна, но не его положение в верхнем левом углу: GetPosition() и GetScreenPosition() всегда возвращают (0, 0)< /code>, GetRect() всегда возвращают (0, 0, ширину, высоту). SetPosition() или SetRect() не оказывают видимого влияния на положение окна, хотя SetRect() правильно устанавливает ширину и высоту. Что дает? Некоторые приложения в Fedora 40, похоже, способны запоминать и восстанавливать свою позицию (например, Skype), так что, вероятно, это не системное ограничение. Но как мне сделать это для моего собственного приложения wxPython?
Вот минимальный пример, воспроизводящий поведение, о котором я говорю. Я также заметил, что сообщение EVT_MOVE не обрабатывается в Fedora, что может быть связано с проблемой (не включенной в этот пример).
#!/usr/bin/env python3
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, window_id, title):
wx.Frame.__init__(self, parent, window_id, title)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Show(True)
def ReadSettings(self):
rect = [0, 0, 100, 100]
try:
with open("settings.txt", "r") as f:
rect = [int(s) for s in f.read().split(",")]
except:
pass
self.SetSize(*rect)
def WriteSettings(self):
with open("settings.txt", "w") as f:
f.write(",".join((str(s) for s in self.GetRect())))
def OnClose(self, evt):
self.WriteSettings()
self.Destroy()
app = wx.App(0)
frame = MainWindow(None, -1, "Test")
frame.ReadSettings()
frame.Show(1)
app.MainLoop()
Подробнее здесь: [url]https://stackoverflow.com/questions/78547848/wxpython-wx-frame-get-set-position-doesnt-work-under-wayland[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия