2016-09-10 4 views
1

Я новичок в wxPython, и я нахожу некоторые проблемы при настройке заданного размера для обоих фреймов и окон (виджеты). Я выделил проблему в простейшем случае, когда я пытаюсь создать кадр размером 250x250 пикселей.Установить размер wx.Frame (wxPython - wxWidgets)

Выполнение кода я получаю окно фактического размера 295 шириной от 307 высота (с учетом Windows's верхней панели окна)

Я использую Python 2.7 в ОС Windows 10.

Что мне не хватает?

#!/bin/env python 
import wx 

# App Class 
class MyAppTest7(wx.App): 

    def OnInit(self): 

     frame = AppFrame(title = u'Hello World', pos=(50, 60), size=(250, 250)) 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 

# AppFrame 
class AppFrame(wx.Frame): 
    def __init__(self, title, pos, size): 
     wx.Frame.__init__(self, parent=None, id=-1, title=title, pos=pos, size=size) 


if __name__ == '__main__': 
     app = MyAppTest7(False) 
     app.MainLoop() 

ДОПОЛНИТЕЛЬНО тест на дальнейшее шоу выпуска:

#!/bin/env python 
import wx 

class MyApp(wx.App): 
    def OnInit(self): 
     self.frame = MyFrame(None, title="The Main Frame") 
     self.SetTopWindow(self.frame) 
     self.frame.Show(True) 
     return True 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id=wx.ID_ANY, title="", pos=wx.DefaultPosition, size=(400,100), style=wx.DEFAULT_FRAME_STYLE, name="MyFrame"): 
     super(MyFrame, self).__init__(parent, id, title, pos, size, style, name) 
     self.panel = wx.Panel(self) 

if __name__ == "__main__": 
    app = MyApp(False) 
    app.MainLoop() 

И результат:

Как вы можете видеть, отображаемое окно (кадр) имеет 482 пикселей (нижняя бар- -см краски) вместо ожидаемого 400.

Window size measured in pixels

+0

Как вы измеряете размеры рамки? –

+0

Я делаю скриншот в Windows 10 с помощью клавиши Alt + PrintScreen. Затем я просто измеряю ширину в Paint. –

+0

Сделайте свой размер экрана и сделайте ширину рамки, затем используйте 'print self.frame.GetSize()' и посмотрите, что вы получаете. –

ответ

1

Добавить это может быть передний ваш призыв к app.MainLoop():

import wx.lib.inspection 
wx.lib.inspection.InspectionTool().Show() 

Это позволит вам легко увидеть фактический размер (и другую информацию) для каждого виджета в приложении, например:

Widget Inspection Tool