小编Stu*_*Cox的帖子

在OSX中的另一个应用程序上触发掉落事件

我使用一些专有软件进行DJ(Native Instruments Traktor).如果您不熟悉这种事情,只需将其视为一个美化的iTunes:它浏览并播放音频文件.

我想为此构建一个自定义文件浏览器应用程序,但没有任何类型的API.这,但是,允许音频文件拖动,然后从文件系统,这是一个很好的开始下降.

我正在设计的文件浏览器的性质意味着我不想实际拖放东西 - 我只想在我的应用程序中单击一个组件,并具有相同的效果.所以我正在寻找从我的文件浏览器应用程序以编程方式触发另一个应用程序上的drop事件的方法.

我选择的平台是Python和PyQt,但我开始觉得我可能需要更低级别.虽然没有做过大量的C#/ Java,但这可能是一个学习曲线(我已经完成了很多ANSI C,但这可能太低了 ......)

这是我有多远:

  • 我做了一个非常简单的PyQt应用程序
  • 我拖动应用程序中的QLabel时可以创建QDrag对象
  • 我可以附加所有正确的MIME数据来表示音频文件
  • 因此,如果我将QLabel从我的应用程序拖放到Traktor中,它会识别音频文件并播放它 - 好时光

所以现在我需要删除中间人,然后点击,打包我的MIME数据,让Traktor认为我已经将它拖放到它上面.

我还在OSX开发人员的文档中做了一些深入研究,特别是这些东西,它描述了传递给目标应用程序(丢弃目标)的消息序列.

这一切都是有道理的,但是我正濒临下降到C#/ Java试图模仿这些消息,这听起来像兔子洞,如果我可以避免它,我宁愿不冒险.

所以,在我做之前......

  1. 这甚至可能吗?或者我是否会遇到某种跨应用安全障碍等?(删除目的地只直接从操作系统或其他东西接受消息)
  2. 如果是,有没有更简单的方法呢?理想情况下使用PyQt/Tkinter/wxPython ......?

我知道我可以用点击自动化做到这一点,但我可以想象,真的不可靠,会大量依赖窗户的位置等.

提前致谢!

python macos xcode drag-and-drop pyqt

9
推荐指数
1
解决办法
562
查看次数

在Python中使用`assertRaises()`的自定义失败消息?

Python 2.7版单元测试文档说:

所有断言方法(除了assertRaises(),assertRaisesRegexp())接受一个msg论点,即,如果指定,则使用作为在发生故障时的错误消息

...但是如果我想为assertRaises()或指定错误消息assertRaisesRegexp()怎么办?

使用案例:在循环中测试各种值时,如果失败,我想知道哪一个:

NON_INTEGERS = [0.21, 1.5, 23.462, math.pi]

class FactorizerTestCase(unittest.TestCase):
    def test_exception_raised_for_non_integers(self):
        for value in NON_INTEGERS:
            with self.assertRaises(ValueError):
                factorize(value)
Run Code Online (Sandbox Code Playgroud)

如果其中任何一个失败,我得到:

AssertionError: ValueError not raised
Run Code Online (Sandbox Code Playgroud)

这对我来说找不到哪一个失败并没有太大帮助...如果我能提供msg=像我一样的论据assertEqual()等等!

(我当然可以将它们分解为单独的测试函数 - 但是我可能需要测试一些值,或者它需要一些缓慢/昂贵的设置,或者它是更长时间功能测试的一部分)

我很喜欢它,如果我可以很容易地得到它报告:

AssertionError: ValueError not raised for input 23.462
Run Code Online (Sandbox Code Playgroud)

- 但是要保证重新实现/扩展assertRaises()并在我的测试中添加更多代码也不是一件非常重要的事情.

python unit-testing assertraises python-unittest

7
推荐指数
1
解决办法
1743
查看次数

为yepnope.js安装node.js依赖项时出现"ERR!not package"

我很确定我在做一些愚蠢的事情 - 我不相信它是特定于yepnope ...我的节点知识并不那么热.

只是试图抓住并构建回购来玩一些东西(我不是试图在其他项目中使用它),我这样做:

$ npm cache clean
$ git clone https://github.com/SlexAxton/yepnope.js.git
$ cd yepnope.js
$ git checkout v2.0     # this is the branch I want
$ npm install
Run Code Online (Sandbox Code Playgroud)

但是在整个过程中,我得到了这样的结论:

npm http GET https://registry.npmjs.org/nopt/-/nopt-2.1.1.tgz
npm http 200 https://registry.npmjs.org/wd/0.0.26
npm http GET https://registry.npmjs.org/wd/-/wd-0.0.26.tgz
npm ERR! not a package /var/folders/00/17q10000h01000cxqpysvccm004yw4/T/npm-13923/1363859875320-0.8848134819418192/tmp.tgz
npm http 304 https://registry.npmjs.org/uglify-js
npm ERR! Error: ENOENT, open '/var/folders/00/17q10000h01000cxqpysvccm004yw4/T/npm-13923/1363859875320-0.8848134819418192/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or …
Run Code Online (Sandbox Code Playgroud)

node.js npm yepnope

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