从另一个导入的脚本更改文本变量

时间:2017-01-14 00:33:57

标签: python checkbox tkinter

所以我们有两个脚本,第一个是AdidasStock.py,第二个是StockWindow.py。我正在尝试从 StockWindow.py 替换 getVarientStock 中的基本网址。再一次,我的道歉是我对python的新手。

我收到错误:

  

aulocale1()只需要2个参数(给定1个)

class AdidasStock:

    def __init__(self, clientId, sku):

        self.session = requests.session()
        self.headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36",
                        "Accept-Language" : "REPLACETHISPLIZZZ"}
        self.locale = ''
        self.clientId = clientId
        self.sku = sku
        self.skus = []

    def getVarientStock(self, sku, base):
        base = "http://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU"
        urlVariantStock = base + '/Product-GetVariants?pid=' + sku
        r = requests.get(urlVariantStock, headers=self.headers)

以下是我尝试更改上述基础,self.locale和self.headers的一部分的方法。我正在使用Tkinter Checkbutton来触发此功能。

Checkbutton

aulocale = IntVar()
aucheck = Checkbutton(self.master, variable=aulocale, onvalue=1, offvalue=0, text="AU",command=self.aulocale1)

这是功能

 def aulocale1(self,base):
        base.replace = "http://www.adidas.com.au/on/demandware.store/Sites-adidas-AU-Site/en_AU"
        self.locale.replace = ('','AU')
        self.headers.replace = ('REPLACETHISPLIZZZ','en-AU,en;q=0.8')

    def uklocale1(self,base):
        base.replace = "www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB"
        self.locale.replace = ('','GB')
        elf.headers.replace = ('REPLACETHISPLIZZZ','en-GB,en;q=0.8')

1 个答案:

答案 0 :(得分:0)

函数def aulocale1(self,base):需要一个参数 - base但是当您使用Checkbox将此函数分配给command=self.aulocale1时,Checkbox将执行此函数而不带参数 - 它将运行self.aulocale1()

您可以使用command

为参数分配lambda函数
command=lambda:self.aulocale1("argument")

(顺便说一句:如果您在lambda循环中使用for,那么您将遇到其他问题;))

base是局部变量,因此您无法更改它...但您可以使用参数base运行此函数,以便您可以对此参数使用默认值

def getVarientStock(self, sku, base="http://www.adidas.com.au/ ...")
    urlVariantStock = base + '/Product-GetVariants?pid=' + sku
    r = requests.get(urlVariantStock, headers=self.headers)

如果您在没有base

的情况下运行它
getVarientStock("XX") 

然后它使用"http://www.adidas.com.au/ ..."作为base

但如果你用第二个参数

运行它
getVarientStock("XX", "http://stackoverflow.com") 

然后它使用"http://stackoverflow.com"作为base