Танцы с бубнами в wxPython

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
Начал пробовать ваять ГУИ на wxPython.
Код простенького интерфейса под спойлером:
Код:
#!/usr/bin/env python3

import wx
import wx.adv
from wx.lib.wordwrap import wordwrap
import random
 
class MyWindow(wx.Frame):
   
    def __init__(self):
        super().__init__(None, title = "WX-Test-MessageBox") #style = wx.DEFAULT_FRAME_STYLE & ~ wx.RESIZE_BORDER
       
        panel = wx.Panel(self, wx.ID_ANY)
        box_sizer = wx.BoxSizer(wx.VERTICAL)
       
        grid_sizer = wx.GridBagSizer(10, 10)
        # Инструкция приложения
        lbl_caption = wx.StaticText(panel, label = "Введите значение в нужное поле", style = wx.ALIGN_CENTRE_VERTICAL)
        lbl_caption.SetForegroundColour('#556B2F')
        sfont = wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        lbl_caption.SetFont(sfont)
        grid_sizer.Add(lbl_caption, pos = (0,0), span = (1,5), flag = wx.EXPAND|wx.ALL, border = 10)
       
        self.ent_cls = wx.TextCtrl(panel)
        self.ent_frg = wx.TextCtrl(panel)
        self.ent_ran = wx.TextCtrl(panel)
        self.ent_klv = wx.TextCtrl(panel)
        self.ent_rmr = wx.TextCtrl(panel)
        self.ent_dls = wx.TextCtrl(panel)
       
        lbl_cls = wx.StaticText(panel, label = "Первый")
        lbl_cls.SetBackgroundColour('#FFDEAD')
        lbl_frg = wx.StaticText(panel, label = "Второй")
        lbl_ran = wx.StaticText(panel, label = "Третий")
        lbl_klv = wx.StaticText(panel, label = "Четвёртый")
        lbl_klv.SetBackgroundColour('#FFDEAD')
        lbl_rmr = wx.StaticText(panel, label = "Пятый")
        lbl_dls = wx.StaticText(panel, label = "Шестой")
       
        #font_lbl = wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        # lbl_cls.SetFont(font_lbl)
        # lbl_frg.SetFont(font_lbl)
        # lbl_ran.SetFont(font_lbl)
        #lbl_klv.SetFont(font_lbl)
        # lbl_rmr.SetFont(font_lbl)
        # lbl_dls.SetFont(font_lbl)
       
        lbl_emp1 = wx.StaticText(panel, label = '')
        lbl_emp2 = wx.StaticText(panel, label = '')
       
        imag = wx.Image('ракета.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        bmp = wx.StaticBitmap(panel, bitmap = imag)
        grid_sizer.Add(bmp, pos = (1,2), span = (5,1), flag = wx.EXPAND|wx.BOTTOM, border = 0)
       
        grid_sizer.Add(self.ent_cls, pos = (1,0), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(self.ent_frg, pos = (2,0), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(self.ent_ran, pos = (3,0), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(self.ent_klv, pos = (1,4), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(self.ent_rmr, pos = (2,4), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(self.ent_dls, pos = (3,4), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
       
        grid_sizer.Add(lbl_cls, pos = (1,1), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_frg, pos = (2,1), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_ran, pos = (3,1), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_klv, pos = (1,3), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_rmr, pos = (2,3), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_dls, pos = (3,3), span = (1,1), flag = wx.EXPAND|wx.ALL, border = 0)
       
        # sz = self.grid_sizer.GetEmptyCellSize()
        # print(sz)
        grid_sizer.Add(lbl_emp1, pos =(4,0), span = (1,2), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(lbl_emp2, pos =(4,3), span = (1,2), flag = wx.EXPAND|wx.ALL, border = 0)
       
        btn_comp = wx.Button(panel, label = "Нажать")
        btn_clr = wx.Button(panel, label = "Нажми")
       
        grid_sizer.Add(btn_comp, pos = (5,0), span = (1,2), flag = wx.EXPAND|wx.ALL, border = 0)
        grid_sizer.Add(btn_clr, pos = (5,3), span = (1,2), flag = wx.EXPAND|wx.ALL, border = 0)
       
        # grid_sizer.AddGrowableCol(0)
        # grid_sizer.AddGrowableCol(1)
        # grid_sizer.AddGrowableCol(2)
        # grid_sizer.AddGrowableCol(3)
        # grid_sizer.AddGrowableCol(4)
        #grid_sizer.Fit(self)
       
        box_sizer.Add(grid_sizer, proportion = 0, flag = wx.EXPAND|wx.ALL, border = 10)
        panel.SetSizerAndFit(box_sizer)

        self.Fit()

if __name__ == "__main__":
   
    app = wx.App()
    window = MyWindow()
    window.Show()
    app.MainLoop()

И получил вот такой результат:

Снимок экрана в 2022-11-19 21-43-21.png

Как можно видеть -- у текстовых контроллов разный размер. Нет границы заданной справа и снизу.
Статик тексты подсветил я.
Верхний статик текст обрезан. Снизу обрезано.
Применение self.Layout() -- ничего не меняет.
Почитал в тырнетах етих вашех© -- подобный случай нашёл на Ubuntu.
Может кто нибудь сказать -- что это такое и как с этим бороться?
Linux Mint 20.3.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
вы выбираете не самые популярные фреймворки, лично я не знаю никого, кто бы разбирался в wx, как и в gtk, попробуйте почитать документацию...

upd
попробуйте посмотреть в сторону qt, тут я вам смогу помочь...
 

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
Да это я сделал и делаю в нон-стопе. Однако это пока не решено. В Gtk+, Tkinter, Qt таких заморочек по платформам нет.
Надо посмотреть что с кодом в С++ с WX.
Тут просто говорят инсайдеры что скоро с Qt будут проблемы, так что есть необходимость перехода на возможные платформы/библиотеки.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Да это я сделал и делаю в нон-стопе. Однако это пока не решено. В Gtk+, Tkinter, Qt таких заморочек по платформам нет.
Надо посмотреть что с кодом в С++ с WX.
Тут просто говорят инсайдеры что скоро с Qt будут проблемы, так что есть необходимость перехода на возможные платформы/библиотеки.
в таком случае я бы сделал окошки на апи системы в с++, зачем сюда приплетать питон?

upd
и с qt проблема одна, это установщик, но она опен сорс, новую версию можно собрать из исходников
 

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
Даже и не знаю что сказать -- чем больше языков в выборе тем лучше тащемта.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Даже и не знаю что сказать -- чем больше языков в выборе тем лучше тащемта.
все ваши гуи фреймворки на с++, и работают они с апи системы, на питоне просто обертка, при чем тут разнообразие языков, я не понял...
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
у текстовых контроллов разный размер. Нет границы заданной справа и снизу.
Ткни пожалуйста где там конкретно разный размер, я чет потупил минуты 2 и так ничего и не понял. Вот я запустил у себя твой код:
Безымянный.png
 

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
А чего спойлер не ищется?
По поводу обёрток -- люди то на разных языках пишут или нет?
Даю развёртку по поводу разных размеров контроллов -- я развернул окошко:
Снимок экрана в 2022-11-19 23-44-27.png
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
По поводу обёрток -- люди то на разных языках пишут или нет?
ясно
 

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
Мне то лично это и ниннада, но.
Просто выясняю пригодность по платформам.
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
разных размеров контроллов
что такое "контроллов"?
 

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
Это такая фигнюша на экране обведена рамочкой и там в одной мигает курсор(там фокус спрятался).
Они для ввода текста.
Называются TextCtrl -- текстовый контролл(Text Control).
 

Форум IT Специалистов