[英]Python3 - tkinter importing and using module
I am having trouble importing and using a module I have created. 我在导入和使用我创建的模块时遇到麻烦。 I have patcher.py and I would like to import modules from patches.py but I get an error when trying to import and use disable_removecd.
我有patcher.py,我想从patch.py导入模块,但是在尝试导入和使用disable_removecd时出现错误。 I am now a little confused on how to set it up properly and how to import and use it correctly.
我现在对如何正确设置它以及如何正确导入和使用它有些困惑。
patcher.py 补丁程序
#import the tkinter module
from tkinter import *
from tkinter.filedialog import askopenfilename
import bsdiff4
from patches import *
#bsdiff4.file_patch(dst, dst, patch)
#create a new class
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid(row = 2, sticky = W+E+N+S)
#,padx=300
cmexecutable = askopenfilename()
print(cmexecutable)
self.mainmenu()
def mainmenu(self):
self.logo = PhotoImage(file='logo.gif')
self.image = Label(self, image=self.logo)
self.image.grid(columnspan = 2)
self.image.configure(background='black')
#self.bttn1 = Button(self, text = 'Country Specific')
self.bttn1 = Button(self, text = 'Disable Remove CD Message')
self.bttn1['command'] = disable_removecd(self)
self.bttn1.grid(columnspan = 2 ,sticky = W+E+N+S)
patches.py patchs.py
from patcher import *
def disable_removecd():
offset1 = 0x42a98b
offset2 = 0x42a98c
offset3 = 0x42a98d
offset4 = 0x42a98e
offset5 = 0x42a98f
offset6 = 0x42e400
offset7 = 0x42e401
offset8 = 0x42e402
offset9 = 0x42e403
offset10 = 0x42e404
newvalue1 = b'\x90'
newvalue2 = b'\x90'
newvalue3 = b'\x90'
newvalue4 = b'\x90'
newvalue5 = b'\x90'
newvalue6 = b'\x90'
newvalue7 = b'\x90'
newvalue8 = b'\x90'
newvalue9 = b'\x90'
newvalue10 = b'\x90'
with open(cmexecutable, 'r+b') as victim:
victim.seek(offset1)
victim.write(newvalue1)
victim.seek(offset2)
victim.write(newvalue2)
victim.seek(offset3)
victim.write(newvalue3)
victim.seek(offset4)
victim.write(newvalue4)
victim.seek(offset5)
victim.write(newvalue5)
victim.seek(offset6)
victim.write(newvalue6)
victim.seek(offset7)
victim.write(newvalue7)
victim.seek(offset8)
victim.write(newvalue8)
victim.seek(offset9)
victim.write(newvalue9)
victim.seek(offset10)
victim.write(newvalue10)
When I run patcher.py I get this error: 当我运行patcher.py时,出现以下错误:
self.bttn1['command'] = disable_removecd(self)
NameError: name 'disable_removecd' is not defined
What am I doing wrong? 我究竟做错了什么?
The following line in patches.py
causes a cyclic import. patches.py
的以下行导致循环导入。
from patcher import *
I think you used that line to use cmexecutable
in the disable_removecd
function. 我认为您使用该行在
disable_removecd
函数中使用cmexecutable
。 Remove the above line. 删除上面的行。 And pass the value of
cmexecutable
explicitly. 并显式传递
cmexecutable
的值。
patcher.py : patcher.py :
...
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid(row=2, sticky=W+E+N+S)
cmexecutable = askopenfilename()
self.mainmenu(cmexecutable)
def mainmenu(self, cmexecutable):
self.logo = PhotoImage(file='logo.gif')
self.image = Label(self, image=self.logo)
self.image.grid(columnspan=2)
self.image.configure(background='black')
self.bttn1 = Button(self, text = 'Disable Remove CD Message')
self.bttn1['command'] = lambda: disable_removecd(cmexecutable)
# ^^ set up callback instead of calling it immediately using `lambda`.
self.bttn1.grid(columnspan=2 ,sticky=W+E+N+S)
The function disable_removecd
in patches.py
should be modified to accept cmexecutable
as a parameter: 该功能
disable_removecd
在patches.py
应加以修改,以接受cmexecutable
作为参数:
def disable_removecd(cmexecutable):
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.