这个问题可能与另一个SO问题有关。
我正在运行MacOS 10.11.2 El Capitan。希望在我的OpenGL应用程序周围具有丰富的GUI功能,我决定尝试PyQT5创建OpenGL上下文,以便将OpenGL作为QtWidget集成到GUI应用程序中。
QT5为QGlWidget提供了几种API方法,在此我简要地总结一下:
initializeGL:之前被调用过一次 paintGL paintGL:将内容绘制到活动帧缓冲区的地方我能够创建小部件并初始化着色器等。但是当涉及到帧缓冲区相关操作时,会glClear出现错误:
File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
OpenGL.error.GLError: GLError(
err = 1286,
description = 'invalid framebuffer operation',
baseOperation = glClear,
cArguments = (GL_COLOR_BUFFER_BIT,)
)
Run Code Online (Sandbox Code Playgroud)
我发现了一个网站,报告相关问题。似乎在调用API方法时没有配置帧缓冲区。我觉得这应该是QT的任务,我没有尝试自己配置窗口帧缓冲区。但是我发现在调用API方法后,神奇地创建了帧缓冲区。因此,我建立了一个小技巧,它将等待paintGL被调用的NSKIP_PAINTGL=3时间。然后,配置我的对象,以便正常的paintGL进程开始工作。这似乎有效。但是有时需要的NSKIP_PAINTGL时间不止一次,因此我sleep在解决方法中加入了一些内容。QT似乎应该在应该创建之后创建帧缓冲区。也许QT是在单独的线程中进行的?该QOpenGLWidget 确认有时可能不会创建帧缓冲区:
返回值帧缓冲区对象句柄;如果尚未初始化,则返回0。
我不喜欢这样的工作环境,因为我担心这里的条件会提高。我在这里也没有太多的控制权(我需要依靠这样的事实,即QT首先经常调用paintGL,这样hack才能起作用)。我目前不熟悉QT框架,所以这是我的问题:
如何创建某种循环,该循环在QGLControllerWidget创建时会运行updateGLa覆盖的方法try/catch并在GlError出现时重试?或者,循环可以侦听QOpenGLWidget::defaultFramebufferObject()并等待对象句柄。
当然,我想将这种技巧尽可能优雅地集成到QT应用程序流程中,这很可爱 …
我想知道是否可以在子类中使用描述符的装饰器。
class Descriptor():
def __get__(self, instance_obj, objtype):
raise Exception('ouch.')
def decorate(self, f):
print('decorate', f)
return f
class A():
my_attr = Descriptor()
class B():
@my_attr.decorate
def foo(self):
print('hey, whatsup?')
# --> NameError: name 'my_attr' is not defined
Run Code Online (Sandbox Code Playgroud)
这当然是行不通的,因为my_attr在 的类定义中未定义B。
接下来我尝试了:
class B():
@A.my_attr.decorate
def foo(self):
print('hey, whatsup?')
# --> Exception: ouch.
Run Code Online (Sandbox Code Playgroud)
但是,此方法调用描述符__get__方法(其中instance_obj参数为None),因此会触发测试异常。要访问装饰器,可以检查是否instance_obj返回None描述符本身:
def __get__(self, instance_obj, objtype):
if instance_obj is None:
return self
raise Exception('avoid this')
# --> …Run Code Online (Sandbox Code Playgroud) 我想知道是否存在一个函数(在 scala 或猫中)忽略flatMap. 例如
Some("ignore this").ignoreArgumentFlatMap(Some("result"))
Run Code Online (Sandbox Code Playgroud)
这将与
Some("ignore this").flatMap(_ => Some("result"))
Run Code Online (Sandbox Code Playgroud) 在我的情况,我收到了numpy.ndarray作为unit8大小4 * n代表的原始二进制数据float32的实体。所以4个项目一起代表一个float32。为了获取float32数字,我目前将uint8原始数据转换为二进制字符串,然后从该字符串中读取float32值。
np.fromstring(raw_unit8_data.tostring(), dtype='<f4')
Run Code Online (Sandbox Code Playgroud)
是否有可能直接进行这种转换而无需uint8先将数据转换为字符串?
我尝试定义受约束的多态值列表,例如
myList = ["foo", 5] :: [Show a => a]
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误(GHCi,版本 8.6.5)
GHC 尚不支持不可预测的多态性
无论如何,是否可以指定一种类型,例如,表单的函数f :: Show a => [a] -> [String]可以使用上述受约束的值?
换句话说,有没有办法让编译器验证下面的代码?
(++ "fork") . show <$> ["foo", 5]
Run Code Online (Sandbox Code Playgroud)
我目前尝试Show通过定义值和预期结果的数据集来测试GADT的类型类实例[(value, "expectedResult")]。但是,由于 GADT 的构造函数指定了值类型,因此不可能天真地做到这一点。
PHP 从 5.6 版本开始就具有可变参数解包功能。
function doSomething(User ...$users) {
return count($users);
}
$userOrNoUserList = [$user1, null, $user2];
doSomething(...$userOrNoUserList); // wanted: 3
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
可捕获的致命错误:传递给 doSomething() 的参数 2 必须是 user 的实例,给定为 null
但我想保留里面的列表结构doSomething();我不想null在调用之前过滤值。是否也可以允许null值?
我基于ReaderT 设计模式构建了一个项目。我选择使用简单的处理程序注入作为函数参数,而不是使用类型类方法进行依赖项注入。这部分工作得很好,因为我们能够静态构建依赖树并动态定义环境。
环境可能包含配置以及日志记录效果:: String -> IO ()、时间效果:: IO UTCDate等。考虑以下简化示例
import Control.Monad.Reader (runReaderT, liftIO, reader, MonadReader, MonadIO)
data SomeEnv
= SomeEnv
{ a :: Int
, logger :: String -> IO ()
}
class HasLogger a where
getLogger :: a -> (String -> IO())
instance HasLogger SomeEnv where
getLogger = logger
myFun :: (MonadIO m, MonadReader e m, HasLogger e) => Int -> m Int
myFun x = do
logger <- reader getLogger
liftIO $ …Run Code Online (Sandbox Code Playgroud) 该函数natVal :: forall n proxy. KnownNat n => proxy n -> Integer将类型级别 natural 与Integer值相关联。使用DataKinds,TypeApplications语言扩展可以做
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
module Derp where
import Data.Proxy ( Proxy(..) )
import GHC.TypeLits ( natVal )
foo :: Integer
foo = natVal (Proxy @1337)
Run Code Online (Sandbox Code Playgroud)
如何将 a'Maybe Nat与一个值相关联?例如一个Maybe Integer
foo2 :: Maybe Integer
foo2 = maybeNatVal (Proxy @(Just 1337))
Run Code Online (Sandbox Code Playgroud) 是否有完成部分功能的标准方法PartialFunction[A, B]?像这样的东西:
completePartialFunction(pf: PartialFunction[A, B], z: B): A => B
Run Code Online (Sandbox Code Playgroud)
或者
completePartialFunction2(pf: PartialFunction[A, B], f: A => B): A => B
Run Code Online (Sandbox Code Playgroud) haskell ×3
python ×3
scala ×2
arrays ×1
descriptor ×1
monads ×1
numpy ×1
opengl ×1
php ×1
pyqt ×1
python-3.x ×1
qt ×1
qt5 ×1
scala-cats ×1