标签: subclassing

带有模板 UI 的自定义 Gtk Widget

我已经使用模板创建了一个自定义 Gtk Widget,并且我想在其他 Gtk Builder 文件上使用它。

我做了什么:

  • 编写了一个 .ui 文件<template class="G3JAMinScenes" parent="GtkBox">
  • 编写小部件源代码(.c/.h)

当我使用小部件按预期工作时创建它时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)

gtk gtkbuilder subclassing gtk3

5
推荐指数
1
解决办法
4159
查看次数

如何确保我的 matplotlib 轴属于自定义类?

我有一个自定义图形类,并希望确保与其关联的所有轴(无论是使用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 …

python axes matplotlib figures subclassing

5
推荐指数
0
解决办法
759
查看次数

在子类中使用 FabricJS loadSVGFromURL

我有一个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)

javascript svg canvas subclassing fabricjs

5
推荐指数
0
解决办法
736
查看次数

将大括号更改为 str.format() 中的标识符

format()方法很棒,但我想更改我选择的标识符,因为我不想逃避{并且}在字符串中

例如
'Hi {name}'.format(**{'name': 'Alok'})将打印'Hi Alok'

'Hi {{{name1}, {name2}}}'.format(**{'name1':'foo', 'name2':'bar'})
将打印'Hi {foo, bar}'

在第二个例子中{, and}是我的字符串的一部分,所以我必须使用{{and来转义它们}}转义它们。

我不想逃避{}甚至不想使用jinja等模板引擎。如何更改标识符?我想会有办法使用子类化str类。

python string subclassing

5
推荐指数
1
解决办法
1182
查看次数

如何在Windows CE下的单行EDIT控件上按ENTER键时关闭蜂鸣声?

我正在使用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时触发,我无法捕获; 我只是想不通哪个.我真的想要阻止设备发出哔哔声,因为它会混淆在某些情况下发生项目碰撞时播放的其他声音,并且至关重要的是用户会收到警报.

提前致谢.

c++ winapi editcontrol subclassing

4
推荐指数
1
解决办法
3881
查看次数

iPhone - 从nib文件加载UIView?

我正在子类化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)

iphone objective-c uiview subclassing

4
推荐指数
1
解决办法
8657
查看次数

为每个子类提供自己的类变量副本

我的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可以改变字典.因此,每个子类中都应该有几个类方法.

我怎样才能以聪明的方式解决这个问题?如果我的描述不充分,请告诉我.

inheritance objective-c class-variables subclassing

4
推荐指数
2
解决办法
1078
查看次数

Objective-C子类化和未来的兼容性

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编写的遗留代码,该方法将被覆盖,并且会产生不可预测的结果.

有没有什么技术可以防止我的代码出现这种问题?这可能发生在类别或(可能)其他事情上.

objective-c subclassing

4
推荐指数
1
解决办法
116
查看次数

使用额外的接口实现在Java中实例化匿名内部类

假设我有以下两个类/接口定义:

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

4
推荐指数
1
解决办法
529
查看次数

区域设置感知编辑控件子类化为十进制数字(格式[符号] [xxx ...] [小数分隔符] [yy ...])

介绍及相关资料:

我有一个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)

c++ winapi locale editcontrol subclassing

4
推荐指数
1
解决办法
873
查看次数