我已经使用模板创建了一个自定义 Gtk Widget,并且我想在其他 Gtk Builder 文件上使用它。
我做了什么:
<template class="G3JAMinScenes" parent="GtkBox">当我使用小部件按预期工作时创建它时g3jamin_scenes_new,问题是我想使用 Gtk Builder 将其添加为窗口的子级,所以我写道:
...
<child>
<object class="G3JAMinScenes" parent="GtkBox" id="scnes">
</object>
</child>
...
Run Code Online (Sandbox Code Playgroud)
但当我尝试运行时它会抛出错误:
Gtk-CRITICAL **: Error building template class 'G3JAMinAppWindow' for an instance of type 'G3JAMinAppWindow': Invalid object type `G3JAMinScenes'
Run Code Online (Sandbox Code Playgroud) 我有一个自定义图形类,并希望确保与其关联的所有轴(无论是使用subplots()或twinx()等创建的)都具有自定义行为。
现在,我通过在创建每个轴后将新方法绑定到每个轴来完成此操作,例如使用
import types
def my_ax_method(ax, test):
print('{0} is doing something new as a {1}.'.format(ax, test))
class MyFigure(matplotlib.figure.Figure):
def __init__(self, **kwargs):
super(MyFigure, self).__init__(**kwargs)
axes_a = None
axes_b = None
axes_c = None
def setup_axes(self, ax):
self.axes_a = ax
self.axes_b = self.axes_a.twinx()
self.axes_c = self.axes_a.twiny()
self.axes_a.my_method = types.MethodType(my_ax_method, self.axes_a)
self.axes_b.my_method = types.MethodType(my_ax_method, self.axes_b)
self.axes_c.my_method = types.MethodType(my_ax_method, self.axes_c)
Run Code Online (Sandbox Code Playgroud)
在类似的事情中
fig, ax = matplotlib.pyplot.subplots(FigureClass=MyFigure)
fig.setup_axes(ax)
fig.axes_a.my_method("probe of A")
fig.axes_b.my_method("test of B")
fig.axes_c.my_method("trial of C")
Run Code Online (Sandbox Code Playgroud)
这似乎是完成我想做的事情的一种脆弱的方式。有没有更好、更 Pythonic 的方法来解决这个问题?
特别是,有没有一种方法可以确保Axes …
我有一个FabricJS基于FabricJS组的自定义子类:
var canvasObject = fabric.util.createClass(fabric.Group, {
type: 'canvasObject',
initialize: function(options) {
options || (options = { });
this.callSuper('initialize', options);
var rectBase = new fabric.Rect({
fill : 'red',
originX: 'left',
originY: 'top',
left: options.margin.l,
top: options.margin.t,
width : (options.width-options.margin.l-options.margin.r),
height :(options.height-options.margin.t-options.margin.b),
});
var labeledRect = new LabeledRect({
width: options.width,
height: options.height,
'idname': options.idname,
background: 'transparent',
labelFont: '14px Helvetica',
});
this.callSuper('initialize', [labeledRect, rectBase], options);
},
toObject: function() {
return fabric.util.object.extend(this.callSuper('toObject'), {
idname: this.get('idname')
});
},
_render: function(ctx) { …Run Code Online (Sandbox Code Playgroud) format()方法很棒,但我想更改我选择的标识符,因为我不想逃避{并且}在字符串中
例如
'Hi {name}'.format(**{'name': 'Alok'})将打印'Hi Alok'
'Hi {{{name1}, {name2}}}'.format(**{'name1':'foo', 'name2':'bar'})
将打印'Hi {foo, bar}'
在第二个例子中{, and}是我的字符串的一部分,所以我必须使用{{and来转义它们}}转义它们。
我不想逃避{,}甚至不想使用jinja等模板引擎。如何更改标识符?我想会有办法使用子类化str类。
我正在使用C++和本机WINAPI(即没有MFC等)开发针对POCKET PC 2003(Windows CE 4.2)设备的应用程序.在其中我有一个单行编辑控件,它是主窗口的一部分(不是对话框); 因此,按ENTER键时Windows的正常行为是除了蜂鸣声之外什么也不做.
我已经将编辑控件的窗口过程子类化为使用以下代码覆盖默认行为:
LRESULT CALLBACK Gui::ItemIdInputProc( HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam ) {
switch ( message ) {
case WM_KEYDOWN :
switch ( wParam ) {
case VK_RETURN :
addNewItem();
return 0;
}
}
return CallWindowProc( oldItemIdInputProc_, hwnd, message, wParam, lParam );
}
Run Code Online (Sandbox Code Playgroud)
这会导致与按下"确定"按钮等效的行为.
现在解决手头的问题:这个窗口过程不会覆盖发出蜂鸣声的默认行为.我怀疑必须有一些其他消息或消息在按下ENTER时触发,我无法捕获; 我只是想不通哪个.我真的想要阻止设备发出哔哔声,因为它会混淆在某些情况下发生项目碰撞时播放的其他声音,并且至关重要的是用户会收到警报.
提前致谢.
我正在子类化UIView尝试从nib文件加载我在界面构建器中删除的视图.我在返回行上收到以下错误:
由于未捕获的异常'NSGenericException'而终止应用程序,原因是:'此编码器要求从initWithCoder返回替换的对象:'
- (id)initWithCoder:(NSCoder *)aDecoder
{
[super initWithCoder:aDecoder];
NSArray *objects = [[NSBundle mainBundle]
loadNibNamed:@"MyView"
owner:nil
options:nil];
if (self = [objects objectAtIndex:0])
{
}
return [self retain];
}
Run Code Online (Sandbox Code Playgroud) 我的iOS应用程序中有以下类(它类似于Java世界中的抽象类).
@implementation WSObject
static NSDictionary* _dictionary = nil;
+(NSDictionary*) dictionary {
if (_dictionary == nil) {
_dictionary = [NSKeyedUnarchiver unarchiveObjectWithFile:[self localStorePath]];
}
return _dictionary;
}
...
@end
Run Code Online (Sandbox Code Playgroud)
然后,我有多个类,WSObject使用类方法实现上述dictionary.问题是,这些类中的每一个都应该有自己的类_dictionary,但它们都是从超类共享同一个对象.当然,我可以复制到所有子类,但这会破坏可重用性.除了这个getter之外,还有其他类方法WSObject可以改变字典.因此,每个子类中都应该有几个类方法.
我怎样才能以聪明的方式解决这个问题?如果我的描述不充分,请告诉我.
Objective-C支持子类化和类别,允许您将方法添加到现有类.这是我的情况.
// Made at earlier than iOS 5.x
@interface MyVC : UIViewController
- (void)childViewControllers;
@end
Run Code Online (Sandbox Code Playgroud)
childViewControllers在iOS 5.0之前没有这种方法.我可以毫无顾虑地添加方法.但现在UIViewController有一个名字的方法.如果我构建为iOS 4.x编写的遗留代码,该方法将被覆盖,并且会产生不可预测的结果.
有没有什么技术可以防止我的代码出现这种问题?这可能发生在类别或(可能)其他事情上.
假设我有以下两个类/接口定义:
public abstract class FooClass {
public abstract void doFoo();
}
Run Code Online (Sandbox Code Playgroud)
和
public interface BarInterface {
public void doBar();
}
Run Code Online (Sandbox Code Playgroud)
如果我想创建一个扩展/实现两者的匿名内部类,我是否需要这样做:
public abstract class BothClass extends FooClass implements BarInterface {}
...
new BothClass() {
public void doFoo() {
System.out.println("Fooooooooo!!!!");
}
public void doBar() {
System.out.println("Baaaaaaaar!!!!");
}
}.doBar();
Run Code Online (Sandbox Code Playgroud)
或者是否有一个允许我不定义的捷径BothClass?这样的事情,也许:
new (FooClass implements BarInterface)() {
public void doFoo() {
System.out.println("Fooooooooo!!!!");
}
public void doBar() {
System.out.println("Baaaaaaaar!!!!");
}
}.doBar();
Run Code Online (Sandbox Code Playgroud)
(这个想法给了我几个错误,这些都没有帮助)
java anonymous-inner-class subclassing interface-implementation
我有一个edit control应该只接受带符号的十进制数字 - 就像-123.456.此外,它应该是区域设置,因为小数分隔符对于每个国家都不相同 - 使用美国点,而在欧洲它是逗号等等.
到目前为止,我已经习惯subclassing了这个.这是我实现的逻辑subclassing,通过伪代码表示:
if ( ( character is not a [ digit,separator, or CTRL/Shift... ] OR
( char is separator and we already have one ) )
{
discard the character;
}
Run Code Online (Sandbox Code Playgroud)
首先,我创建了一个帮助函数,确定char数组是否已经有一个小数分隔符,如下所示:
bool HasDecimalSeparator( wchar_t *test )
{
// get the decimal separator
wchar_t szBuffer[5];
GetLocaleInfo ( LOCALE_USER_DEFAULT,
LOCALE_SDECIMAL,
szBuffer,
sizeof(szBuffer) / sizeof(szBuffer[0] ) );
bool p = false; // text …Run Code Online (Sandbox Code Playgroud) subclassing ×10
objective-c ×3
c++ ×2
editcontrol ×2
python ×2
winapi ×2
axes ×1
canvas ×1
fabricjs ×1
figures ×1
gtk ×1
gtk3 ×1
gtkbuilder ×1
inheritance ×1
iphone ×1
java ×1
javascript ×1
locale ×1
matplotlib ×1
string ×1
svg ×1
uiview ×1