User interface wxpython应用程序在分辨率较低时离开屏幕
晚上好/早上好 我一直在我的1920x1080显示器上开发一个相当深入的程序。我已将所有内容设置为在最大化时适合我的显示器。我有一些问题,我认为与我设置尺寸器的方式有关 首先,当我减小屏幕的实际大小时,窗口内容不会随之减少,而是从右侧被切断。因此,更小的屏幕意味着内容的一半,而不是内容大小的一半 这一问题也将延续到我调整决议的时候。在分辨率较低的情况下,我只能得到屏幕上实际显示的内容的一半。我不知道应该如何设置我的尺码器来解决此问题,因此,下面简要介绍一下我现在使用尺码器的方式:User interface wxpython应用程序在分辨率较低时离开屏幕,user-interface,wxpython,resolution,maximize,sizer,User Interface,Wxpython,Resolution,Maximize,Sizer,晚上好/早上好 我一直在我的1920x1080显示器上开发一个相当深入的程序。我已将所有内容设置为在最大化时适合我的显示器。我有一些问题,我认为与我设置尺寸器的方式有关 首先,当我减小屏幕的实际大小时,窗口内容不会随之减少,而是从右侧被切断。因此,更小的屏幕意味着内容的一半,而不是内容大小的一半 这一问题也将延续到我调整决议的时候。在分辨率较低的情况下,我只能得到屏幕上实际显示的内容的一半。我不知道应该如何设置我的尺码器来解决此问题,因此,下面简要介绍一下我现在使用尺码器的方式: import
import wx
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title,(-1,-1))
self.parent = parent
self.initialize()
""" Create All of the pieces for the GUI """
def initialize(self):
sizer = wx.GridBagSizer()
panel = wx.Panel(self)
# Handles the creation of all of the buttons
def make_button(text, starty, startx, height, width):
button = wx.Button(self, -1, text)
sizer.Add(button, (starty, startx), (height, width), wx.EXPAND)
return button
# Handles the c reation of all of the static text labels
def make_label(text, starty, startx, height, width):
self.label = wx.StaticText(self, -1, text, wx.DefaultPosition, wx.DefaultSize)
sizer.Add(self.label, (starty, startx), (height, width), wx.EXPAND)
return self.label
# Create all of the labels for each slot and buttons
for i in range(0, 4):
# all the labels
make_label('Voltage', 7, i*5, 1, 1)
make_label('Current', 8, i*5, 1, 1)
make_label('Power', 9, i*5, 1, 1)
make_label('Rail 1', 6, (i*5)+1, 1, 1)
make_label('Rail 2', 6, (i*5)+2, 1, 1)
make_label('Rail 3', 6, (i*5)+3, 1, 1)
make_label('Total Power', 6, (i*5)+4, 1, 1)
make_label('Status:', 14, (i*5), 1, 1)
# Global Rail commands for all 4 slots
make_button("Margin Low", 1, (i*5)+2, 1, 1)
make_button("Margin High", 1, (i*5)+3, 1, 1)
make_button("Margin Off", 1, (i*5)+4, 1, 1)
# Rail 1 for all 4 slots
make_button("Margin High", 11, (i*5)+1, 1, 1)
make_button("Margin Low", 12, (i*5)+1, 1, 1)
make_button("Margin Off", 13, (i*5)+1, 1, 1)
# Rail 2 for all 4 slots
make_button("Margin High", 11, (i*5)+2, 1, 1)
make_button("Margin Low", 12, (i*5)+2, 1, 1)
make_button("Margin Off", 13, (i*5)+2, 1, 1)
# Rail 3 for all 4 slots
make_button("Margin High", 11, (i*5)+3, 1, 1)
make_button("Margin Low", 12, (i*5)+3, 1, 1)
make_button("Margin Off", 13, (i*5)+3, 1, 1)
# Create the Configure buttons for each slot (only needs to run three times so needs if statement
if i < 3:
# Make the Configure buttons for Slot 1
make_button("Configure", 10, i+1, 1 ,1)
# Make the Configure buttons for Slot 2
make_button("Configure", 10, i+6, 1, 1)
# Make the Configure buttons for Slot 3
make_button("Configure", 10, i+11, 1, 1)
# Make the Configure buttons for Slot 4
make_button("Configure", 10, i+16, 1, 1)
self.SetSizerAndFit(sizer)
self.SetSizeHints(-1,-1)
self.Show(True)
self.Maximize(True)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Add-in Card GUI')
app.MainLoop()
这也没有改变任何事情。我曾尝试将SetSizeHints设置为特定的分辨率,但也不起作用
那么,是什么导致了这个问题呢?我有一种感觉,这与我对所有内容只使用一个尺码有关。如果是这种情况,我最简单的解决方法是什么,而不必完全重建新的大小写器并分解内容?您需要将大小写器的列和行标记为可增长的:
...
for i in range(0, 20):
sizer.AddGrowableCol(i, 1)
for i in range(0, 15):
sizer.AddGrowableRow(i, 1)
self.SetSizerAndFit(sizer)
...
以你的例子为例。现在,它仍然不会缩小很多,因为你有很多小部件,它们都有最小的尺寸,但它至少会压缩一点。(并展开以占用更多空间(如果可用)
至少对于wxPython>=3,您需要确保仅尝试使行或列(如果存在)可增长。能否创建一个小的可运行示例来演示此问题?我发布了一个小的工作示例。不过很抱歉,我一生都没能把它弄对。它在堆栈上看起来很正常,但由于某种原因,当我将它复制到gedit时,它会出错,所以请注意这一点。示例位于上面的第一个文本框中,并替换了我的旧文本框。我不确定您是否希望它在较小的空间内运行,但您可以使用
滚动面板
panel=wx.lib.scrolledpanel.scrolledpanel(self)panel.SetupScrolling()
我同意@SelçukCihan的观点。我只需要使用一个滚动面板
。有这么多的小部件,我不确定它是否可以调整它们的大小以使它们可用。
...
for i in range(0, 20):
sizer.AddGrowableCol(i, 1)
for i in range(0, 15):
sizer.AddGrowableRow(i, 1)
self.SetSizerAndFit(sizer)
...