我正在寻找Python 模块的完整在线参考tkinter.我试图自己找一个,但出于某种原因,我不能.
为了澄清,我不是在寻找一个教程.相反,我希望有一个所有可用类和属性的参考.
例如,如果我写这段代码:
from tkinter import *
root = Tk()
root.title("My title")
Run Code Online (Sandbox Code Playgroud)
我想知道:Tk该类接受实例化的可选参数是什么?Tk对象的属性和方法是什么?什么参数title接受?等等...
显然,"看来源"不是这个问题的答案.
这是一个问题的延续使用Python'with'语句捕获异常.
我是新手,我在GNU/linux上使用Python 3.2测试了以下代码.
在上述问题中,提出了类似于此的内容,以便从"with"语句中捕获异常:
try:
with open('foo.txt', 'a'):
#
# some_code
#
except IOError:
print('error')
Run Code Online (Sandbox Code Playgroud)
这让我想知道:如果some_code引发IOError而没有捕获它会发生什么?它显然被外部的"除外"声明所吸引,但这可能不是我真正想要的.
你可以说好,只需用另一个try-except包装some_code,依此类推,但我知道异常可以来自任何地方,并且不可能保护每一段代码.
总而言之,我只是想打印'错误',当且仅当open('foo.txt','a')引发异常时,所以我在这里问为什么以下代码不是标准的建议方式这样做:
try:
f = open('foo.txt', 'a')
except IOError:
print('error')
with f:
#
# some_code
#
#EDIT: 'else' statement is missing, see Pythoni's answer
Run Code Online (Sandbox Code Playgroud)
谢谢!
我在Arch Linux x86_64中使用Python 3.2.1.这个真的让我发疯了:我只想在ttk.Combobox网格上有一个默认的预选值.这是我的代码:
from tkinter import Tk, StringVar, ttk
root = Tk()
def combo(parent):
value = StringVar()
box = ttk.Combobox(parent, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)
combo(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这画空了Combobox.有趣的是,如果我不使用某个功能,它可以很好地工作:
from tkinter import Tk, StringVar, ttk
root = Tk()
value = StringVar()
box = ttk.Combobox(root, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
当然,在真正的程序中我必须使用一个函数,所以我需要另一个解决方案.
这是关于Python 3.2(GNU/Linux x86_64)上的日志记录模块:是否可以使用字典配置设置自定义处理程序?这是我正在尝试的代码:
import logging
import logging.config
class CustomHandler(logging.StreamHandler):
pass
logconfig = {
'version': 1,
'handlers': {
'console': {
'class': 'CustomHandler',
}
},
'loggers': {
'custom': {
'handlers': ['console'],
}
}
}
logging.config.dictConfig(logconfig)
logger = logging.getLogger('custom')
logger.error('Error message')
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.这是输出:
Traceback (most recent call last):
File "/usr/lib/python3.2/logging/config.py", line 390, in resolve
found = self.importer(used)
ImportError: No module named CustomHandler
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.2/logging/config.py", line 569, in configure …Run Code Online (Sandbox Code Playgroud) 在Python中,是否有某种或多或少的方法可以打开压缩的SQLite数据库而不必在某个地方写入临时文件?
就像是:
import bz2
import sqlite3
dbfile = bz2.BZ2File("/path/to/file.bz2", "wb")
dbconn = sqlite3.connect(dbfile)
cursor = dbconn.cursor()
...
Run Code Online (Sandbox Code Playgroud)
这当然引起了:
ValueError: database parameter must be string or APSW Connection object
Run Code Online (Sandbox Code Playgroud)
谢谢!
从docs.python.org引用:
" sys.argv传递给Python脚本的命令行参数列表.argv[0]是脚本名称(它是依赖于操作系统的,无论这是否是完整路径名.)如果命令是使用-c解释器的命令行选项执行的,argv[0]则设置为字符串'-c'.如果没有脚本名称传递给Python解释器,argv[0]则为空字符串."
我错过了什么,或者sys.argv[0]总是返回脚本名称,并且'-c'我必须使用sys.argv[1]?
我在GNU/Linux上使用Python 3.2进行测试.
我在 Arch Linux x86_64 上使用 Python 3.2.1。
我正在尝试使用一些类似于以下代码的线程定时循环更新 sqlite 数据库:
import sqlite3
from threading import Timer
from queue import Queue
class DBQueue(Queue):
def give(self, item):
self.task_done()
self.join()
self.put(item)
return True
def timer():
print('A')
Timer(3, add).start()
def add():
print('B')
db = qdb.get()
cur = db.cursor()
cur.execute('INSERT INTO Foo (id) VALUES (NULL)')
qdb.give(db)
timer()
qdb = DBQueue()
# SOLUTION #1:
# qdb.put(sqlite3.connect(':memory:', check_same_thread=False))
# SOLUTION #2: see Eli Bendersky's answer
qdb.put(sqlite3.connect(':memory:'))
db = qdb.get()
cur = db.cursor()
cur.execute('CREATE TABLE Foo (id INTEGER …Run Code Online (Sandbox Code Playgroud) 我的应用程序具有与此类似的结构:
myapp.py
basemod.py
[pkg1]
__init__.py
mod1.py
[pkg2]
__init__.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
myapp.py:
import pkg1
import pkg2
if __name__ == '__main__':
pkg1.main()
pkg2.main()
Run Code Online (Sandbox Code Playgroud)
basemod.py:
import pkg1
def get_msg():
return pkg1.msg
Run Code Online (Sandbox Code Playgroud)
pkg1/__init__.py:
import mod1
msg = None
def main():
global msg
mod1.set_bar()
msg = mod1.bar
Run Code Online (Sandbox Code Playgroud)
pkg1/mod1.py:
bar = None
def set_bar():
global bar
bar = 'Hello World'
Run Code Online (Sandbox Code Playgroud)
pkg2/__init__.py:
import mod2
def main():
mod2.print_foo()
Run Code Online (Sandbox Code Playgroud)
pkg2/mod2.py:
import basemod
foo = basemod.get_msg()
def print_foo():
print(foo)
Run Code Online (Sandbox Code Playgroud)
如果我跑,myapp.py我得到:
None
Run Code Online (Sandbox Code Playgroud)
在我看来,我期待:
Hello …Run Code Online (Sandbox Code Playgroud)