Python 3中的tkFileDialog模块在哪里?使用简单的Dialog在Python中选择文件的问题引用模块使用:
from Tkinter import Tk
from tkFileDialog import askopenfilename
Run Code Online (Sandbox Code Playgroud)
但在Python 3中使用它(在将Tkinter更改为tkinter之后)获得:
Traceback (most recent call last):
File "C:\Documents and Settings\me\My Documents\file.pyw", line 5, in <module>
import tkFileDialog
ImportError: No module named tkFileDialog
Run Code Online (Sandbox Code Playgroud)
python 2.7.2 doc(docs.python.org)说:
tkFileDialog
Common dialogs to allow the user to specify a file to open or save.
These have been renamed as well in Python 3.0; they were all made submodules of the new tkinter package.
Run Code Online (Sandbox Code Playgroud)
但它没有提示新名称是什么,在3.2.2文档中搜索tkFileDialog和askopenfilename根本不返回任何内容(甚至没有从旧名称到新子模块名称的映射.)
尝试显而易见的不做杰克:
from tkinter import askopenfilename, asksaveasfilename
ImportError: …Run Code Online (Sandbox Code Playgroud) 我想从多字段字符串列表中创建列表列表,并想知道是否可以在理解中这样做.
输入:
inputs = ["1, foo, bar", "2, tom, jerry"]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[[1, "foo", "bar"], [2, "tom", "jerry"]]
Run Code Online (Sandbox Code Playgroud)
在理解中拆分字符串很简单:
>>> [s.split(",") for s in inputs]
[['1', ' foo', ' bar'], ['2', ' tom', ' jerry']]
Run Code Online (Sandbox Code Playgroud)
但是我很难弄清楚在理解之后字符串被拆分后如何访问列,因为它似乎需要一个变量赋值.以下是有效的Python,但说明了我正在寻找的内容:
[[int(x), y.strip(), z.strip() for x,y,z = s.split(",")] for s in inputs]
or
[[int(v[0]), v[1].strip(), v[2].strip() for v = s.split(",")] for s in inputs]
Run Code Online (Sandbox Code Playgroud)
有没有办法在理解中分配变量,以便输出可以由变量的函数组成?循环是微不足道的,但通过转换输入生成列表肯定看起来像是一个"理解 - 任务"任务.
outputs = []
for s in inputs:
x,y,z = s.split(",")
outputs.append([int(x), y.strip(), z.strip()])
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个pythonic成语来将一个键列表和一个值转换成一个dict,这些键嵌套.例如:
dtree(["a", "b", "c"]) = 42
or
dtree("a/b/c".split(sep='/')) = 42
Run Code Online (Sandbox Code Playgroud)
将返回嵌套的字典:
{"a": {"b": {"c": 42}}}
Run Code Online (Sandbox Code Playgroud)
这可用于将带有分层键的一组值转换为树:
dtree({
"a/b/c": 10,
"a/b/d": 20,
"a/e": "foo",
"a/f": False,
"g": 30 })
would result in:
{ "a": {
"b": {
"c": 10,
"d": 20 },
"e": foo",
"f": False },
"g": 30 }
Run Code Online (Sandbox Code Playgroud)
我可以编写一些FORTRANish代码来使用强力和多个循环进行转换collections.defaultdict,但是,它似乎是一种具有拆分和连接的语言,切片和理解应该有一个原语,将字符串列表["a","b","c"]转换为嵌套的dict键["a"]["b"]["c"].如果不使用evaldict表达式字符串,最简单的方法是什么?
回答问题Django管理员ManyToMany内联"没有ForeignKey to"错误是指Django Admin文档.给出的模型有:
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, related_name='groups')
Run Code Online (Sandbox Code Playgroud)
内联管理类是:
class MembershipInline(admin.TabularInline):
model = Group.members.through
class PersonAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
class GroupAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
exclude = ('members',)
Run Code Online (Sandbox Code Playgroud)
...允许从"个人"页面管理组成员资格,但不能从"组"页面管理.但是,如果管理员只想从"组"页面管理成员,该怎么办?摆脱这一exclude行将允许两个页面管理关系,但Django文档(可能不正确)说"你必须告诉Django的管理员不显示这个小部件".他们可能的意思是你"应该"告诉Django的管理员不要显示它 - 如果你不这样做会发生什么不好,但这是多余的.
因此,如果不更改模型,是否可以从"个人"页面而不是"组"页面中排除成员资格窗口小部件?两个明显的尝试:
class PersonAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
exclude = ('Group.members',)
Run Code Online (Sandbox Code Playgroud)
和
class PersonAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
exclude = ('groups',)
Run Code Online (Sandbox Code Playgroud)
(使用related_name模型中的第二个)失败并显示错误:
'PersonAdmin.exclude' refers to field 'groups' that is missing from the form.
Run Code Online (Sandbox Code Playgroud)
是的,该模型可以改变把ManyToManyField下Person …
我在使用 Python 单元测试时遇到了一个奇怪的错误。我的项目中有两个文件夹:
project
code
__init__.py (empty)
app.py (defines my App class)
test
test.py (contains my unit tests)
Run Code Online (Sandbox Code Playgroud)
测试.py是:
import os, sys, unittest
sys.path.insert(1, os.path.join(sys.path[0],'..'))
from code.app import App
class test_func1(unittest.TestCase):
...
Run Code Online (Sandbox Code Playgroud)
当我运行 test.py 时,我收到消息:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "...test.py, line 5, in <module>
from code.app import App
ImportError: No …Run Code Online (Sandbox Code Playgroud) 感谢PT看起来正确的答案问题在Eclipse中构建多SDK Android应用程序而不会丢失编译时检查.但是,当我尝试按照建议使用@TargetApi()注释时,它会生成语法错误.
@TargetApi(11) // location 1
public class DisplayMessageActivity extends Activity {
@Override
@TargetApi(11) // location 2
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
@TargetApi(11) // location 3
getActionBar().setDisplayHomeAsUpEnabled(true); }
Run Code Online (Sandbox Code Playgroud)
@TargetApi行在代码中间生成两个语法错误,如位置3所示:
x Syntax error, insert "enum Identifier" to complete EnumHeaderName
x Syntax error, insert "enumBody" to complete BlockStatements
Run Code Online (Sandbox Code Playgroud)
无论我是@TargetApi在if声明之前还是在声明之后,都存在错误,如图所示.是否有任何先决条件(导入)或Lint API Check文章http://tools.android.com/recent/lintapicheck中未提及的其他注意事项,以使@TargetApi()正常工作?
---编辑9/3/2012 ---
如果我将@TargetApi注释移动到类定义(显示为位置1)之前或方法定义之前(显示为位置2,在@Override注释之前或之后),我会得到不同的错误:
x TargetApi cannot be resolved to a type
x The attribute value …Run Code Online (Sandbox Code Playgroud) Javascript正则表达式问题的答案返回匹配的正则表达式的部分是"否,因为编译破坏了正则表达式文本和匹配逻辑之间的关系."
但Python会保留Match Objects,并re.groups()返回触发匹配的特定组.将每个组的正则表达式文本保留为匹配对象的一部分并返回它应该很简单,但似乎没有这样做的调用.
import re
pat = "(^\d+$)|(^\w+$)|(^\W+$)"
test = ['a', 'c3', '36d', '51', '29.5', '#$%&']
for t in test:
m = re.search(pat, t)
s = (m.lastindex, m.groups()) if m else ''
print(str(bool(m)), s)
Run Code Online (Sandbox Code Playgroud)
返回:
True (2, (None, 'a', None))
True (2, (None, 'c3', None))
True (1, ('51', None, None))
False
True (3, (None, None, '#$%&'))
Run Code Online (Sandbox Code Playgroud)
编译器显然知道这种模式中有三个组.有没有办法在正则表达式中提取每个组中的子模式,例如:
>>> print(m.regex_group_text)
('^\d+$', '^\w+$', '^\W+$')
Run Code Online (Sandbox Code Playgroud)
是的,可以编写自定义模式解析器,例如拆分"|" 对于这种特殊的模式.但是,使用re编译器对每个组中文本的理解会更容易,更可靠.
我对为什么简单的绝对导入失败感到困惑。按照 Python包教程,我有一个带有单个子包的包:
sound/
__init__.py
top.py
formats/
__init__.py
a.py
b.py
Run Code Online (Sandbox Code Playgroud)
a.py 包含:
def foo():
print("foo")
Run Code Online (Sandbox Code Playgroud)
b.py 包含:
from a import foo
def bar():
foo()
if __name__ == "__main__":
bar()
Run Code Online (Sandbox Code Playgroud)
top.py 包含:
from formats import b
if __name__ == "__main__":
b.bar()
Run Code Online (Sandbox Code Playgroud)
两个__init__.py文件都是空的。从声音/格式/,foo按预期运行 b 打印。但是从 sound/,运行 top 会产生错误:
File ".../sound/top.py", line 1, in <module>
from formats import b
File "...\sound\format\b.py", line 1, in <module>
from a import foo
ImportError: No module named 'a'
Run Code Online (Sandbox Code Playgroud)
(注意第一行正斜杠和第二行反斜杠的奇怪外观。Python 3.5,Windows 7 Pro。)这不应该那么复杂——需要什么语法才能让 …
我在Windows上运行一个独立的Python v3.2.2/Tkinter程序,而不是调用任何外部库.Idle在报告异常时非常有用,并且程序已经调试到没有报告的程度.然而,python解释器偶尔会在非确定性时间崩溃 - 操作会运行一段时间然后突然挂起.崩溃触发标准的Windows无响应进程对话框,询问我是否要向Microsoft发送崩溃转储:
"pythonw.exe has encountered a problem and needs to close.
We are sorry for the inconvenience."
Run Code Online (Sandbox Code Playgroud)
Python中的崩溃报告称解释器本身很少崩溃.我的问题是:无论python脚本中有多少错误,理论上是否有任何方法可以使解释器崩溃?由于没有报告异常并且随机时间发生崩溃,因此很难缩小范围.但是如果理论上解释器应该是防崩溃的,那么我正在做的事情就是触发一个bug.
代码(滚动条形图演示)发布在什么是wxPython的最佳实时绘图小部件?.它有3个按钮 - 运行,停止,重置.要导致崩溃,只需按随机顺序按下按钮一分钟左右.没有交互,演示将永远运行而不会崩溃.
"OpenLayers库提供了一个JavaScript API,可以很容易地将各种来源的地图合并到您的网页或应用程序中." 但是,通过扫描文档,各种来源似乎只包括基于网络的地球地图提供者.
是否可以使用OpenLayers在本地存储的底图上显示功能,例如海图(例如http://www.charts.noaa.gov/InteractiveCatalog/nrnc.shtml?rnc=12280)或任意(非地球)光栅图像与人工笛卡尔坐标?
- 编辑 -
以下页面显示了本地存储的图像,与文档说明图像必须可通过Web访问相反.但是,有没有办法使用多个图像文件作为瓷砖?而不是单个文件?
<html>
<head>
<title>OpenLayers Example</title>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
</head>
<body>
<div style="width:640px; height:480px; border:3px solid" id="map"></div>
<script defer="defer" type="text/javascript">
var options = {
maxResolution: 10,
units: 'm',
resolutions: [10, 5, 2, 1, .5],
};
var map = new OpenLayers.Map('map', options);
var extent = new OpenLayers.Bounds(-4824, -3294, 4824, 3294);
var size = new OpenLayers.Size(4824, 3294);
var img = new OpenLayers.Layer.Image( "Basemap",
"maps/map0.jpg", extent, size, {layers: 'basic'} );
map.addLayer(img);
map.zoomToMaxExtent();
</script>
</body> …Run Code Online (Sandbox Code Playgroud) python ×8
python-3.x ×3
tkinter ×2
android ×1
android-lint ×1
crash ×1
dictionary ×1
django ×1
django-admin ×1
eclipse ×1
openlayers ×1
postgresql ×1
psql ×1
regex ×1
stripchart ×1
tree ×1
unit-testing ×1