我有一个生成 GUI 的主要 python 脚本,通过该 GUI,我希望用户能够创建、修改和删除由 Windows 任务计划程序管理的计划。
我在屏幕上显示两秒钟的图像功能时出现问题,然后被破坏.当程序运行函数时,初始调用程序运行正常,但如果函数随后通过tkinter中内置的按钮调用,则会出现错误.
appcwd = os.getcwd()
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
size = str(screensize[0])+'x'+str(screensize[1])
def wlcm_scrn(event=None):
def destroy_wlcm(event=None):
wlcm_scrn.destroy()
global appcwd
global screensize
wlcm_scrn = tkinter.Tk()
file=appcwd+"\\Run_Files\\splash.gif"
splsh_img = tkinter.PhotoImage(file=file)
splosh = tkinter.Label(wlcm_scrn,image=splsh_img)
wlcmh = splsh_img.height()/2
wlcmw = splsh_img.width()/2
splosh.pack()
wlcm_scrn.config(bg='black')
wlcm_scrn.overrideredirect(True)
wlcm_scrn.bind("<Escape>",destroy_wlcm)
wlxym = '+'+str(int((screensize[0]/2)-wlcmw))+'+'+str(int((screensize[1]/2)-wlcmh))
wlcm_scrn.geometry(wlxym)
wlcm_scrn.wm_attributes("-topmost", 1)
wlcm_scrn.after(2000,destroy_wlcm)
wlcm_scrn.mainloop()
wlcm_scrn() #Call through procedure.
Run Code Online (Sandbox Code Playgroud)
调用该函数的按钮.
view_img = tkinter.Button(cfrm,text='Show splash image',command=wlcm_scrn)
Run Code Online (Sandbox Code Playgroud)
通过按钮命令调用时出现错误消息.
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File …Run Code Online (Sandbox Code Playgroud) 我在 Windows 8.1 上使用 Python 3.3.5 和 cx-freeze 4.3.3。
我正在尝试 cx_freeze 一个使用 pkg_resources 的程序。
我最初将它放在包下的安装文件中,但是当我尝试冻结它时,进程因错误而停止Import Error: No module named 'pkg_resources'。

然后我将它在安装文件中从包移动到包含。这次 cx_freeze 进程完成了,但是当我尝试启动应用程序时,我收到了另一条错误消息。

如果我去我的 IDE 并尝试导入 pkg_resources 它工作正常。
>>> import pkg_resources
>>> pkg_resources
<module 'pkg_resources' from 'C:\\Python33\\lib\\site-packages\\setuptools-18.0.1-py3.3.egg\\pkg_resources\\__init__.py'>
Run Code Online (Sandbox Code Playgroud)
这里问了一个类似的问题,解决方法是重新安装setuptools。所以我下载了 setuptools 18.0.1 并通过 cmd 安装了它,但它没有解决我的问题,我仍然遇到与 cx_freeze 相同的错误。
任何帮助使其正常工作将不胜感激。
编辑:我的解决方案(hack)是从 yagmail 中编写依赖项。Yagmail 的原始 _innit__.py...
from pkg_resources import get_distribution
__project__ = 'yagmail'
__version__ = get_distribution(__project__).version
Run Code Online (Sandbox Code Playgroud)
我首先在那里放了一个打印语句来获取版本,然后对其进行硬编码。
__project__ = 'yagmail'
__version__ = '0.4.84'
Run Code Online (Sandbox Code Playgroud)
虽然这解决了我的问题,但它并不是真正的答案,所以如果有人有一个保留 pkg_resources.
我已经查看了有关此特定错误的其他问题,但在这些情况下,在该过程中存在一条路径,其中变量从未定义,因此在稍后调用时会失败.但是在我的程序中,我在try方法之前设置变量,在某些条件下在try方法中更改这些变量,然后if语句稍后调用它们但是失败.当Python到达if语句并尝试创建变量文本时,它声明变量error和error1未定义(在赋值之前引用).
err = 0
error = 'No Error Set'
error1 = 'No Error1 Set'
try:
conn = sqlite3.connect(db_dir)
for row in conn.execute("select max(date) from eod"):
mxdate = row
if mxdate == None:
pass
else:
for row in conn.execute('select date, status from eod where date = ?',(mxdate,)):
_lst_eod = row
for row in conn.execute("select * from temp"):
_crnt_eod = row
conn.close()
except Exception as error:
error = str(error)
err = 1
logged = 0
try:
conn.close()
time = str(right_datetime())[11:19].replace(':','')
conn = …Run Code Online (Sandbox Code Playgroud) 我希望在创建一个迭代字符串并将每个字符与删除线字符(\ u0336)组合在一起的函数时提供一些帮助.输出是原始字符串的删除版本.像这样..
就像是.
def strike(text):
i = 0
new_text = ''
while i < len(text):
new_text = new_text + (text[i] + u'\u0336')
i = i + 1
return(new_text)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能连接而不是结合.
我正在尝试从OptionMenupython3.3中的tkinter小部件获取列表变量.
小部件是这样写的;
list1 = ['One', 'Two', 'Three']
var1 = tkinter.StringVar()
var1.set(list1[0])
window = tkinter.Tk()
my_opmenu = tkinter.OptionMenu(window, var1, *list1)
my_opmenu.grid()
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
我知道您可以使用该cget()方法来检索窗口小部件的配置,我认为在OptionMenu窗口小部件的上下文中my_opmenu是我需要调用的设置.但是当我打电话给它时,我会得到一些看起来像记忆位置的东西.
print(my_opmenu.cget('menu'))
>>.24620080.24620272.25126224.25126352.25126736.menu
Run Code Online (Sandbox Code Playgroud)
显然,内存位置不是恒定的.有什么方法可以让人类的价值回归(即list1).
我是Python的新手,刚刚开始使用tkinter.运行下面的代码我得到一个属性错误but1.pack()(NoneType对象没有属性pack).但据我所知,这个错误对窗口的功能没有任何影响,它仍然pack是按钮.窗口仍然出现,所有按钮都按预期运行.
搜索我可以看到其他人有这个错误,但没有给出的答案解决了我的问题.希望你能提供帮助.
代码:
import tkinter
import ctypes
lst=[]
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
def closewindow():
window.destroy()
def btn1():
lst.append("Button1")
def btn2():
lst.append("Button2")
window = tkinter.Tk()
size = str(screensize[0])+'x'+str(screensize[1])
window.geometry(size)
but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)
but2 = tkinter.Button(window, text="Button2", command=btn2).grid(column = 2, row = 1)
ext = tkinter.Button(window, text="Stop", command=closewindow).grid(column = 3, row = 1)
but1.pack()
but2.pack()
ext.pack()
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
回调;
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 将数据库添加到 python 应用程序的最简单方法是什么,以便在编译然后安装在另一台计算机上时不需要安装单独的 dbms?
在 Python 中,您可以像这样在运行时将新的实例变量添加到类的实例中...
>> class Foo:
>> def __init__(self, bar):
>> self.bar = bar
>>
>> f = Foo()
>> setattr(f, "baz", "spam")
>> f.baz
"spam"
Run Code Online (Sandbox Code Playgroud)
...但它只对 instance 有影响,f对 class 没有影响foo。
>> x = Foo()
>> x.baz
AttributeError: 'Foo' object has no attribute 'baz'
Run Code Online (Sandbox Code Playgroud)
有没有办法将新的实例变量添加baz到类中Foo,以便该类的所有新实例都具有新变量?