我迈出了从.NET迁移到Python的第一步,但我已经对GUI设计感到头疼。
出于某种原因,将size属性传递给wx.Button似乎有点被忽略了。我说"有点"因为实际空间似乎有所改变,但实际按钮仍然占据相同的空间:
import wx
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.InitUI()
def InitUI(self):
self.SetSize((800, 600))
self.SetTitle('Main Menu')
self.Centre()
self.Show(True)
''' Fill the form '''
self.lblUsername = wx.StaticText(self, size=(80, -1), pos=(20,20), label="Username:" )
self.txtUsername = wx.TextCtrl(self, size=(140, -1), pos=(100,20), style=wx.TE_PROCESS_ENTER)
self.lblPassword = wx.StaticText(self, size=(80, -1), pos=(20,50), label="Password:" )
self.txtPassword = wx.TextCtrl(self, size=(140, -1), pos=(100,50), style=wx.TE_PROCESS_ENTER)
self.btnOK = wx.Button( self, label="OK", pos=(260, 16), size=(50,50))
self.btnOK.Bind(wx.EVT_BUTTON, self.onClickOK)
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText('Ready')
def onClickOK(self, e):
print "Button triggered"
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
无论我设定的尺寸如何,按钮都不会拉伸(它会居中,好像所有空间实际上都在使用,但仍然很小)。
有人能发现我做错了吗?
答案 0 :(得分:3)
这是OSX施加的限制。绘制本机按钮小部件的方式只允许它水平拉伸,垂直大小是固定的。或者更确切地说,正如您所发现的,窗口小部件本身可以比垂直方向更大,但它只能在该空间内的固定高度处绘制。现代版本的OSX似乎不太必要,但如果你从几年前看OSX中的按钮,你可能会发现为什么会这样。 " tic-tack"的美学图形效果或"胶囊"如果按钮是非标准垂直尺寸,则会完全破坏按钮,导致用于绘制按钮的图像被拉伸。 wxWidgets在可能的情况下遵循原生平台的外观和感觉标准,在这种情况下,苹果公司的标准被强加给我们,并且wx不能提供与它通常相同的灵活性。
如果你真的想要高于普通按钮,你确实有一些选择。原生小部件有一些不同的标准尺寸,您可以使用SetWindowVariant
方法进行选择,但我不认为这些变体可以达到您想要的高度。或者您可以使用通用按钮小部件而不是本机按钮小部件,例如wx.lib.buttons.ThemedGenButton
。
答案 1 :(得分:1)
我的小软件EventSoundControl中的同样问题。 只需一种解决方法:使用多行标签,wxButton的大小将按预期工作!
答案 2 :(得分:0)
如果您希望在调整框架大小时拉伸按钮,则无法使用静态尺寸和定位。您需要将小部件放在sizer中。然后,当您更改框架的大小时,sizer将管理窗口小部件的位置/大小。 wxPython wiki上有很多示例演示了如何使用sizer。您可能还会发现以下教程很有用: