我面临一个python跨平台应用程序的小问题。最初代码来自GUI wx代码生成器,不幸的是我丢失了这部分。所以我尝试使用wx python代码直接使用记事本。
当ListCtrl的垂直大小超过170像素时,这会透过" OK"按钮如下。我无法看到如何向下移动OK按钮并增加结果列表的垂直大小。我对wx并不放心,而且我真的坚持这一点。
这是我的代码
frame.py(垂直尺寸= 190)
import wx
import wx.xrc
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u'WINDOW', pos=wx.DefaultPosition, size=wx.Size(494, 439), style=wx.CAPTION | wx.CLOSE_BOX | wx.SYSTEM_MENU)
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
self.SetBackgroundColour(wx.Colour(234, 237, 240))
bSizer1 = wx.BoxSizer(wx.VERTICAL)
bSizer6 = wx.BoxSizer(wx.VERTICAL)
bSizer6.AddSpacer((0, 30), 0, wx.EXPAND, 5)
bSizer7 = wx.BoxSizer(wx.HORIZONTAL)
bSizer7.SetMinSize(wx.Size(240, -1))
bSizer7.AddSpacer((65, 0), 0, 0, 5)
self.m_bitmap2 = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(u'icons.png', wx.BITMAP_TYPE_ANY), wx.DefaultPosition, wx.DefaultSize, wx.RAISED_BORDER)
self.m_bitmap2.SetToolTipString(u'OPEN')
bSizer7.Add(self.m_bitmap2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
bSizer7.AddSpacer((55, 0), 1, wx.EXPAND, 5)
self.m_staticText1 = wx.StaticText(self, wx.ID_ANY, u'Search', wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText1.Wrap(-1)
self.m_staticText1.SetFont(wx.Font(14, 70, 90, 90, False, wx.EmptyString))
bSizer7.Add(self.m_staticText1, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 5)
self.searchfield = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PROCESS_ENTER)
self.searchfield.SetMaxLength(0)
self.searchfield.SetFont(wx.Font(15, 70, 90, 90, False, wx.EmptyString))
bSizer7.Add(self.searchfield, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 5)
bSizer6.Add(bSizer7, 1, 0, 5)
bSizer6.AddSpacer((0, 15), 0, 0, 5)
self.gosearch = wx.Button(self, wx.ID_ANY, u'List', wx.DefaultPosition, wx.DefaultSize, 0)
self.gosearch.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 92, False, wx.EmptyString))
bSizer6.Add(self.gosearch, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, 5)
bSizer6.AddSpacer((0, 10), 0, 0, 5)
bSizer1.Add(bSizer6, 1, wx.EXPAND, 5)
gSizer3 = wx.GridSizer(4, 0, 0, 0)
self.dataout = wx.ListCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(480, 190), wx.LC_REPORT | wx.LC_SINGLE_SEL)
self.dataout.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString))
gSizer3.Add(self.dataout, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5)
gSizer3.AddSpacer((0, 0), 1, wx.EXPAND, 5)
self.butok = wx.Button(self, wx.ID_ANY, u'OK', wx.DefaultPosition, wx.DefaultSize, 0)
self.butok.SetFont(wx.Font(14, 70, 90, 90, False, wx.EmptyString))
gSizer3.Add(self.butok, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_BOTTOM, 5)
self.m_staticText7 = wx.StaticText(self, wx.ID_ANY, u'help', wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText7.Wrap(-1)
self.m_staticText7.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 90, True, wx.EmptyString))
gSizer3.Add(self.m_staticText7, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_BOTTOM | wx.ALL, 5)
bSizer1.Add(gSizer3, 1, wx.EXPAND, 5)
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
main.py
import sys
import wx
import frame
if __name__ == '__main__':
app = wx.App(True)
frame1 = frame.MyFrame(None)
frame1.Show(True)
app.SetTopWindow(frame1)
app.MainLoop()
sys.exit()
感谢您的有用答案。
答案 0 :(得分:1)
我喜欢使用从2.8.12开始提供的大小控件(我相信),它们提供的sizer几乎是免费的,编码更少,特别是如果您手动编码。如果你使用关键字(我改变了一些代码,显示我的意思),我也认为代码更清晰/可理解,这允许你放弃使用控件默认值的地方。
使用有意义的变量名称也会更好,例如代替 self.m_statictext7 使用 self.stHelp 之类的内容。
# -*- coding: utf-8 -*-
import wx
import wx.lib.sized_controls as sc
class MyFrame(sc.SizedFrame):
def __init__(self, parent):
super(MyFrame, self).__init__(parent,
title=u'WINDOW',
style=wx.CAPTION | wx.CLOSE_BOX | wx.SYSTEM_MENU)
self.SetBackgroundColour(wx.Colour(234, 237, 240))
pane = self.GetContentsPane()
paneSearch = sc.SizedPanel(pane)
paneSearch.SetSizerType("horizontal")
paneSearch.SetSizerProps(align="center")
self.m_bitmap2 = wx.StaticBitmap(paneSearch,
bitmap=wx.Bitmap(u'icons.png', wx.BITMAP_TYPE_ANY),
style=wx.RAISED_BORDER)
self.m_bitmap2.SetToolTipString(u'OPEN')
self.stSearch = wx.StaticText(paneSearch,
label=u'Search')
self.stSearch.Wrap(-1)
self.stSearch.SetFont(wx.Font(14, 70, 90, 90, False, wx.EmptyString))
self.searchfield = wx.TextCtrl(paneSearch,
style=wx.TE_PROCESS_ENTER)
self.searchfield.SetMaxLength(0)
self.searchfield.SetFont(wx.Font(15, 70, 90, 90, False, wx.EmptyString))
self.gosearch = wx.Button(pane, label=u'List')
self.gosearch.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 92, False, wx.EmptyString))
self.gosearch.SetSizerProps(align="center")
self.dataout = wx.ListCtrl(pane, size=wx.Size(480, 190),
style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
self.dataout.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString))
self.butok = wx.Button(pane, label=u'OK')
self.butok.SetFont(wx.Font(14, 70, 90, 90, False, wx.EmptyString))
self.butok.SetSizerProps(align="center")
self.stHelp = wx.StaticText(pane, label=u'help')
self.stHelp.Wrap(-1)
self.stHelp.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 90, True, wx.EmptyString))
self.stHelp.SetSizerProps(align="center")
self.Fit()
if __name__ == '__main__':
app = wx.App(True)
frame1 = MyFrame(None)
frame1.Show(True)
app.SetTopWindow(frame1)
app.MainLoop()
答案 1 :(得分:0)
感谢您的时间。在你的建议的启发下,我写道:
...
FavBtn = sc.SizedPanel(pane)
FavBtn.SetSizerType("vertical")
FavBtn.SetSizerProps(align="center", proportion=2)
self.m_bitmap2 = wx.StaticBitmap(FavBtn,
bitmap=wx.Bitmap(u'icons.png', wx.BITMAP_TYPE_ANY),
style=wx.RAISED_BORDER)
self.m_bitmap2.SetToolTipString(u'OPEN')
paneSearch = sc.SizedPanel(pane)
paneSearch.SetSizerType("horizontal")
paneSearch.SetSizerProps(align="center")
self.stSearch = wx.StaticText(paneSearch,
label=u'Search')
self.stSearch.Wrap(-1)
self.stSearch.SetFont(wx.Font(14, 70, 90, 90, False, wx.EmptyString))
self.searchfield = wx.TextCtrl(paneSearch,
style=wx.TE_PROCESS_ENTER)
self.searchfield.SetMaxLength(0)
self.searchfield.SetFont(wx.Font(15, 70, 90, 90, False, wx.EmptyString))
self.gosearch = wx.Button(pane, label=u'List')
self.gosearch.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 92, False, wx.EmptyString))
self.gosearch.SetSizerProps(align="center")
...
但是我需要在顶部的“fav”按钮和列表搜索之间分隔并添加一个空格。我怎样才能做到这一点?同样,如果我可以在窗口顶部和fav按钮之间添加空格,那会更好。 我无法用lib大小做到这一点,似乎太自动了。
答案 2 :(得分:0)
这可能看起来很脏,但添加了一个" null"在fav按钮之前和之后的位图图像就是这样做的。
self.m_bitmap_space = wx.StaticBitmap(FavBtn, bitmap=wx.NullBitmap)
self.m_bitmap2 = wx.StaticBitmap(FavBtn,
bitmap=wx.Bitmap(u'icons.png', wx.BITMAP_TYPE_ANY),
style=wx.RAISED_BORDER)
self.m_bitmap2.SetToolTipString(u'OPEN')
self.m_bitmap_space2 = wx.StaticBitmap(FavBtn, bitmap=wx.NullBitmap)
也许你有类似这样的伎俩,例如间距设置。