我正在学习使用wxWidgets和Python,但是我在弄清楚如何在一个框架内调整窗口小部件时遇到了一些麻烦。
我的印象是,我可以通过在调用构造函数时为它们提供自定义大小=(x,y)值来设置各种小部件的大小。这个代码被复制并粘贴到wxPython的示例中,我已经将值=“example”,pos =(0,0)和size =(100,100)值添加到wx.TextCtrl()构造函数中,但是当我运行时这个程序,文本控件占据了整个500x500帧。我不知道为什么,我很感激你能给我的任何帮助让它发挥作用。
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(500,500))
self.control = wx.TextCtrl(self,-1,value="example",pos=(0,0),size=(100,100))
self.CreateStatusBar() # A Statusbar in the bottom of the window
# Setting up the menu.
filemenu= wx.Menu()
# wx.ID_ABOUT and wx.ID_EXIT are standard IDs provided by wxWidgets.
filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
filemenu.AppendSeparator()
filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program")
# Creating the menubar.
menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content.
self.Show(True)
app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()
答案 0 :(得分:2)
请阅读手册中的sizers overview,了解如何正确调整小部件的大小。
至于你的特定例子,它是一个例外,因为wxFrame
总是调整其唯一的窗口来填充其整个客户区 - 这只是因为这是你几乎总是想要的。然而,通常这个唯一的窗口是wxPanel
,它反过来包含其他控件并使用sizer来定位它们。
TL; DR :绝对不要使用绝对定位,即以像素为单位指定位置。
答案 1 :(得分:1)
您肯定需要阅读本书:wxPython 2.8 Application Development Cookbook
阅读 - > 第7章:窗口布局和设计
在您的代码中,添加小部件持有者:面板。
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(500,500))
panel = wx.Panel(self)
self.control = wx.TextCtrl(panel,-1,value="example",pos=(0,0),size=(100,100))
self.CreateStatusBar() # A Statusbar in the bottom of the window
# Setting up the menu.
filemenu= wx.Menu()
# wx.ID_ABOUT and wx.ID_EXIT are standard IDs provided by wxWidgets.
filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
filemenu.AppendSeparator()
filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program")
# Creating the menubar.
menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content.
self.Show(True)
app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()