就像标题所说,我很好奇是否有办法配置ImageGrab.grab()模块来抓取,例如,在多显示器设置中,而不是左边的屏幕.
我正在试验文件I/O. 我有一个小练习程序,可以在运行时创建一个文本文件.我用pyinstaller打包它,以便双击exe创建一个新文件夹,并在其中放置一个带有"hello world"的文本文件.十分简单.
然后我开始疑惑main()
.这只是一个功能,对吧?那么这是否意味着我可以在运行时将参数传递给它?
我正在考虑Steam客户端以及如何在快捷方式中放置'-dev'和'-console'之类的东西.有没有办法对我做过的python exe做到这一点?
我可能会解释得非常糟糕,所以这是一个例子:
def makeFile(string):
if string:
f = open('mytext.txt', 'w') #create text file in local dir
print >> f, 'hello, ' + string + '! \nHow are ya?'
f.close()
else:
f = open('mytext.txt', 'w') #create text file in local dir
print >> f, 'hello, person! \nHow are ya?'
f.close()
def main(string = None):
makeFile(string)
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用此代码并使其成为exe,我是否能够以某种方式添加我的可选参数.
我尝试了上面的代码,并且运行test.exe --"myname"
但是没有用.
有没有办法做到这一点?
我正试图从屏幕截图中检测出一些大写字符.我用PIL将它转换为黑白,然后使用PyTesser页面中的代码示例,我在图像上运行tesser.exe:
from pytesser import *
image = Image.open('fnord.tif')
print image_to_string(image)
Run Code Online (Sandbox Code Playgroud)
我正在使用这个图片:
但它并不认为它是E,或者说它真的是什么东西.我认为这是一个足够干净的捕获?顶部的噪音并没有把它扔掉,对吧?
有什么我想念的吗?
我一直在尝试构建一个屏幕录像机来练习我萎缩的Java技能(即使已经有太多了).
然而,我遇到了机器人类的速度非常慢的问题 - 即使在我的i7驱动的机器上也可能大约15fps,并且在我的macbook上爬行4-5fps.我用Python构建了一个工作记录器,通过使用PIL抓取快照,至少能够达到可靠的20-24fps.
所以,我很好奇,班级这么慢的技术原因是什么?
此外,其他屏幕录像机如何工作?Screencast-o-matic是Java,似乎表现良好.我假设有一些方法可以连接底层操作系统,并从缓冲区或其他东西中删除所有东西?我认为必须有一些非常快速的方法来获取屏幕上绘制内容的副本 - 毕竟,操作系统足够快,可以在进行多次其他计算之后多次绘制屏幕!似乎从一个地方到另一个地方复制一系列颜色应该是一个相对便宜的操作.
我决心不放弃!我只是不知道我需要知道什么才能真正深入了解建造一个合适的录音机.
这是我第一次实际分发Java应用程序.我来自Python背景,它有一套很棒的分发工具叫做PyInstaller和Py2App.这两个都包含了Python解释器的副本以及应用程序,因此无需为最终用户安装任何内容.他们只是简单地看到.EXE
或.app
双击它,程序启动.
到目前为止,我一直无法为Java找到类似的工具.这个应用程序背后的想法是它存储在一个闪存驱动器上,因此它可以运行而无需在主机上安装任何东西.
我找到了适合Windows的不错工具.例如,Launch4J似乎可以解决问题,但它只适用于Windows.我迫切需要类似的功能,但是用于制作应用程序.
以前有人遇到过这个难题吗?有什么工具可供我使用吗?
如果我有:
def EventCheck():
if cond_1 == True:
do small action
if cond_2 == True:
do small action
if cond_3 == True:
for i in range(20):
do longer action multiple times
if cond_4 == True:
do small action
if cond_5 == True:
do small action
while true:
eventCheck()
Run Code Online (Sandbox Code Playgroud)
在我的理论程序中,正常的流量控制将沿着图1的线.a在图片中
是否有可能对程序的实际控制进行分叉,因此如果某个特定事件的计算结果为true,那么它的分支并运行其功能,而程序的其余部分继续正常运行?如上图b所示.
在我的主'事件'循环中,我的条件很少是真的,但是当它出现时,我需要它去执行一个半长的任务.现在,它当然控制了程序,所以当条件A运行它的代码时,没有其他主要的,经常使用的事件能够被检查.
这可能吗?
我试图弄清楚java类是如何工作的.
当我创建一个StringBuilder
:
StringBuilder testString = new StringBuilder("Hello World!);
Run Code Online (Sandbox Code Playgroud)
如果我想,比如说,获取testSting
引用的值,我可以简单地称之为:System.out.println(testString);
这是很酷的行为,但我不确定如何在我制作的类中复制它.
例如,如果我尝试重新实现我自己的版本StringBuilder
,我将采取的方法(作为初学者)将是这样的:
class MyBuilder {
char[] string;
public MyBuilder(String s) {
string = new char[s.length()];
string = s.toCharArray();
}
Run Code Online (Sandbox Code Playgroud)
因此,要使字符串成为数组,我必须将其存储在类的数据字段中.但是,要在我的代码中访问它,我不能通过简单地调用变量名来打印它.我必须使用.property
语法.因此,为了复制上面的例子,我必须键入System.out.println(testString.value);
哪个不是很漂亮.
如何创建一个类,使其行为像String
或StringBuilder
并返回其值而无需手动访问数据字段?
给定一种方法,例如:
public void blit(int[] pos) {
do stuff..
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有先声明它们的情况下传入参数列表?
例如,在Python中,我可以做类似的事情:
def blit(pos):
stuf...
blit([20,50])
Run Code Online (Sandbox Code Playgroud)
我只需传入一个专门在参数列表中创建的列表.要在Java中执行等效操作,我似乎必须首先声明数组,然后才能将它传递给方法.
int[] coordinates = {20,50};
blit(coordinates);
Run Code Online (Sandbox Code Playgroud)
这不是什么大不了的事,但如果我可以做一些像这样的话,它会很方便
blit({20,50});
Run Code Online (Sandbox Code Playgroud)
但是,这当然不起作用.我也试过在调用中创建数组,比如
blit(new int[] = {20,40});
Run Code Online (Sandbox Code Playgroud)
但同样,没有运气.所以,也许是一个可怕的问题,但有没有办法将参数列表传递给一个模仿部分Python行为的方法?
我有一个名为"Canvas"的超类,我从中创建了几个子类.我想将这些子类的实例存储在字典中.所以我尝试设置我的代码如下:
public class Main {
public static void main(String[] args) throws Exception{
Canvas canvas = new Canvas();
Menu menu = new Menu();
Instructions instructions = new Instructions();
Map<String, Canvas> screens = new HashMap<String, Canvas>();
screens.put("menu", menu);
screens.put("instructions", instructions);
Run Code Online (Sandbox Code Playgroud)
因此,我想要添加到字典中的东西都是我的Canvas类的子类,我设置哈希表来接受该类型.这在大多数情况下都有效.但是,最大的问题是我无法访问任何子类的方法.我只能调用超类中存在的方法.
如果我尝试做类似的事情,
screens.get("menu").some_func_in_subclass();
Run Code Online (Sandbox Code Playgroud)
编译器吐出"无法找到符号"消息.
所以,如果我有这样的事情:
SuperClass
|
|
+------------------------------------
| | |
SubClass1 SubClass2 SubClass3
Run Code Online (Sandbox Code Playgroud)
如何将这些子类的实例存储在HashMap中?
使用self.variable语法创建变量和创建没有变量的变量有什么区别?
我正在测试它,我仍然可以从一个实例访问它们:
class TestClass(object):
j = 10
def __init__(self):
self.i = 20
if __name__ == '__main__':
testInstance = TestClass()
print testInstance.i
print testInstance.j
Run Code Online (Sandbox Code Playgroud)
但是,如果我交换了self
它的位置,则会导致错误.
class TestClass(object):
self.j = 10
def __init__(self):
i = 20
if __name__ == '__main__':
testInstance = TestClass()
print testInstance.i
print testInstance.j
>>NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
所以我认为自我在初始化中有一个特殊的作用..但是,我只是不太明白它是什么.
如果我有:
def foo(x):
if x == y:
blah
elif x == z:
blah1
if x == y:
blah2
elif x == a:
blah3
if x == y:
blah
elif x == y:
blah4
if x == b:
blah5
elif x == c:
blah6
Run Code Online (Sandbox Code Playgroud)
我可以突然说出第三个条件的结束,做一些其他的处理,然后当我再次调用它时,让它从它停止的地方开始?