- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用 wxPython 制作 GUI。布局是 GUI 右侧的一个面板,带有 3 个 StaticBoxSizer。其中一个比其他的复杂得多,能够通过单击按钮向其中添加更多元素,因此我决定分解 GUI 文件并为其创建一个自定义类,以尝试使代码更丰富清楚。
该类的当前初始化程序如下所示:
class MonitorBox(wx.StaticBoxSizer):
def __init__(self, monitors, pins, devices, *args, **kw):
super().__init__(*args, **kw)
self.monitors = monitors
self.pin_choices = pins
self.dev_choices = devices
self.InitUI()
def InitUI(self):
monList = wx.FlexGridSizer(cols=4, vgap=5, hgap=5)
add_monitor = wx.Button(self, wx.ID_ANY, "Add Monitor")
add_monitor.Bind(wx.EVT_BUTTON, self.on_add_button)
# create list headings
nametxt = wx.StaticText(self, wx.ID_ANY, "Name:")
devtxt = wx.StaticText(self, wx.ID_ANY, "Device:")
pintxt = wx.StaticText(self, wx.ID_ANY, "Pin:")
blnktxt = wx.StaticText(self, wx.ID_ANY, "")
# Add Headings to sizer
monList.AddMany([nametxt, devtxt, pintxt, blnktxt])
self.monitor_rows = {} # dictionary to store references to all the widgets
# Create a row for each item in the mons dictionary
for monitor, dev in self.mons.items():
del_mon_button = wx.Button(self, wx.ID_ANY, '-', name=monitor, style=wx.BU_EXACTFIT)
del_mon_button.Bind(wx.EVT_BUTTON, self.on_del_monitor)
mon_name = wx.TextCtrl(self, wx.ID_ANY, monitor,
style=wx.TE_PROCESS_ENTER,
name=monitor)
dev_name = wx.ComboBox(self, wx.ID_ANY, choices=self.dev_choices,
style=wx.CB_READONLY, value=dev[0],
name=monitor)
pin_name = wx.ComboBox(self, wx.ID_ANY, choices=self.pin_choices[dev[0]],
style=wx.CB_READONLY, value=dev[1],
name=monitor)
dev_name.Bind(wx.EVT_COMBOBOX, self.on_dev_choice)
pin_name.Bind(wx.EVT_COMBOBOX, self.on_pin_choice)
self.monitor_rows[monitor] = [mon_name, dev_name, pin_name, del_mon_button]
monList.AddMany(self.monitor_rows[monitor])
# TODO: make sure all the combo boxes are the same size
self.monList = monList
self.Add(monList, 1, wx.ALL, 5)
self.Add(add_monitor, 0, wx.ALL, 5)
但是,当我尝试运行 GUI 时,出现错误:
add_monitor = wx.Button(self, wx.ID_ANY, "Add Monitor")
TypeError: Button(): arguments did not match any overloaded call:
overload 1: too many arguments
overload 2: argument 1 has unexpected type 'MonitorBox'
我相信这是因为我试图使用我的自定义类作为其中所有小部件的父类,但我很困惑为什么会发生这种情况?
我对创建 GUI 非常陌生(这是我的第一个项目),但我目前正在检查和修复对 parent 等的所有引用。因此,我很难知道要搜索的正确术语看看其他人是否也遇到过这个问题。
我的原始代码只是从 GUI 的主 wx.Frame 调用的 InitUI(self)
函数,并将 monBox 创建为 StaticBoxSizer,这也直接添加了所有子窗口小部件。正如一开始提到的,我想将其拆分的原因是因为该面板创建了许多事件处理程序和附加对话框,我想将它们保留在单独的文件中以帮助保持代码的可读性。
原始代码(未拆分为单独的类)生成如图所示的“监视器”面板:
最佳答案
问题是您从 wx.StaticBoxSizer
和 wx.Button
派生出 MonitorBox 类。只能是窗口的子窗口(wx.Frame
、wx.Panel
等),而不是 sizer (wx.StaticBoxSizer
)。
如果您想分离代码,那么您的 MonitorBox 类应该来自 wx.Panel
。请参阅下面的代码(及其注释)以了解执行此操作的方法。
import wx
class MonitorBox(wx.Panel):
"""
This is the class with all the widgets in your MonitorBox class.
You need to arrange the widget in a sizer here.
"""
def __init__(self, parent):
super().__init__(parent=parent)
#### Parent panel
# No need to define a parent panel because the class itself is already a
# panel. So self refers to a panel.
#### Widgets
# Here self is a panel not a sizer like in your question. So no problem
# adding the button.
self.add_monitor = wx.Button(self, wx.ID_ANY, "Add Monitor")
#### Sizers
self.sizer = wx.BoxSizer()
#### Add widgets to sizer
self.sizer.Add(self.add_monitor, flag=wx.CENTER)
#### Add sizer to panel
self.SetSizer(self.sizer)
self.Fit()
class Main(wx.Frame):
def __init__(self):
super().__init__(None, title='Panel 3 comes from a different class',
size=(500, 500))
#### Parent panel
self.panel = wx.Panel(self)
#### Some widgets
## The Static Box widget
self.monitorsBox = wx.StaticBox(self.panel, label="Monitors")
self.panelB = wx.Panel(self.panel, size=(200, 100))
self.panelB.SetBackgroundColour((0, 0, 255))
self.panelR = wx.Panel(self.panel, size=(200, 100))
self.panelR.SetBackgroundColour((255, 0, 0))
## Add panel 3 as a child of the wx.StaticBox!!!
self.panel3 = MonitorBox(self.monitorsBox)
#### Sizers
## Main sizer
self.sizer = wx.FlexGridSizer(3, 1, 5, 5)
## Sizers for the static box
# The static box sizer
self.monitorsBoxSizer = wx.StaticBoxSizer(self.monitorsBox, wx.VERTICAL)
# Sizer for the content of the static box
self.monitorsBoxSizerContent = wx.BoxSizer()
#### Add widgets to sizers
## Static box content
self.monitorsBoxSizerContent.Add(self.panel3, flag=wx.EXPAND)
self.monitorsBoxSizer.Add(self.monitorsBoxSizerContent)
## Add everything to the main sizer
self.sizer.Add(self.panelB, flag=wx.EXPAND|wx.ALL, border=10)
self.sizer.Add(self.panelR, flag=wx.EXPAND|wx.ALL, border=10)
self.sizer.Add(self.monitorsBoxSizer, flag=wx.EXPAND|wx.ALL, border=10)
#### Add sizer to self.panel
self.panel.SetSizer(self.sizer)
self.panel.Fit()
if __name__ == '__main__':
app = wx.App()
frame = Main()
frame.Show()
app.MainLoop()
在原始代码中,主类很可能是从 wx.Frame 派生的,对吧?如果没有,请忽略其余部分。这就是它起作用的原因。因为您将按钮设置为框架的子级而不是大小调整器。
关于python - 无法在 wxPython 中将自定义 Sizer 作为父级添加到其子级小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56316894/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!