python无法引用另一个文件中的列表

我需要在main.py里从window.py中获取列表text_content的值,但是失败了,有没有大佬知道为什么,代码如下


```python

mian.py

import window
from window import text_content

def main():
    window.mainWin()
    content = text_content
    print(content)

main()

window.py

from tkinter import *
from  tkinter import scrolledtext

text_content = []

class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.grid()
        self.createWidget()

    def createWidget(self):
        
        self.la2 = Label(self, text='重量(kg):').grid(row=1, column=0, padx=(10, 0))
        self.en2 = Entry(self)
        self.en2.grid(row=1, column=1, columnspan=1, padx=(0, 10), ipadx=20)  # 1行1列,跨2列

        self.btn = Button(self, text="确定", command=self.click_btn).grid(row=1, column=2, padx=(0, 30), ipadx=30)
        self.btn2 = Button(self, text="输入完毕", command=self.click_btn2).grid(row=4, column=2, padx=(0, 30), ipadx=30)
       
        self.text = scrolledtext.ScrolledText(self, width=50, height=20)
        self.text.grid(row=3, column=0, columnspan=3, padx=5, pady=10)

    def click_btn(self):
       
        input2 = self.en2.get()
        str =  input2 + ' '

        #print(getinputstr)
        print(input1, input2)
        self.text.insert('1.0', str+'\n')
        self.en2.delete(0, END)

    def click_btn2(self):
        text_content = (self.text.get('0.0', 'end').replace('\n', ' ')).split()
        print(text_content)
        #return text_content

def mainWin():
    root = Tk()
    root.title('NuContent')
 
    sw = root.winfo_screenwidth()
    sh = root.winfo_screenheight()
    ww = 410
    wh = 400
    x = (sw - ww)/2
    y = (sh - wh)/3
    root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
    root.resizable(False, False)
    app = Application(master=root)

    app.mainloop()

```

  • 这篇博客: 解决python爬虫乱码问题及.text与.content的区别中的 遇到问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 爬取某网站(不便透露)的帖子过程中,发现数据解析不对,中文乱码,或者只能解析出一半的中文。
    开发者模式查看到charset="gbk"
    然而该网页的编码方式如下:

    response = requests.get(test_url)
    
    print(response.encoding) #查看网页返回的字符集类型
    print(response.apparent_encoding) #自动判断字符集类型
    

    输出为:

    ISO-8859-1
    GB2312

    enconding是从http从中猜测的响应内容编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文。
    apparent——encoding是从内容中分析出的响应内容编码方式。

    因此,requess模块猜测网页的编码方式与实际的编码方式不同,网页申明的编码方式是gbk。

    尝试输出print(response.text[:1000]),结果如下
    在这里插入图片描述

    再尝试输出print(response.text[:1000])结果如下:
    在这里插入图片描述

最后我是这样解决的,我之所以要在main里引用text_content是因为我把数据处理的命令写在了main里,只要把数据处理命令挪到click_btn函数里就可以了。仅仅是将text_content设置为全局变量无法解决在main里引用为空值的问题。

在main.py中,你需要从window.py中获取列表text_content的值,但是你的尝试没有成功。下面是代码和解释。

import window
from window import text_content

def main():
    window.mainWin()
    content = text_content
    print(content)

main()

在这里,我们导入了window.py并从中导入text_content。在main函数中,我们调用了window.py中的主函数mainWin(),但是我们直接调用text_content并不会获取到正确的值。我们需要在click_btn2函数中将text_content赋值为全局变量,这样我们才能在main函数中获取到正确的值。

def click_btn2(self):
    global text_content  # 声明text_content为全局变量
    text_content = (self.text.get('0.0', 'end').replace('\\n', ' ')).split()
    print(text_content)

在click_btn2函数中,我们需要将text_content赋值为全局变量,这样我们才能在main函数中获取到正确的值。我们将text_content从ScrolledText中获取,然后将其转化为列表并赋值给text_content。这样,我们就能在main函数中获取到正确的值了。


window.py

from tkinter import *
from  tkinter import scrolledtext

text_content = []

class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.grid()
        self.createWidget()

    def createWidget(self):

        self.la2 = Label(self, text='重量(kg):').grid(row=1, column=0, padx=(10, 0))
        self.en2 = Entry(self)
        self.en2.grid(row=1, column=1, columnspan=1, padx=(0, 10), ipadx=20)  # 1行1列,跨2列

        self.btn = Button(self, text="确定", command=self.click_btn).grid(row=1, column=2, padx=(0, 30), ipadx=30)
        self.btn2 = Button(self, text="输入完毕", command=self.click_btn2).grid(row=4, column=2, padx=(0, 30), ipadx=30)

        self.text = scrolledtext.ScrolledText(self, width=50, height=20)
        self.text.grid(row=3, column=0, columnspan=3, padx=5, pady=10)

    def click_btn(self):

        input2 = self.en2.get()
        str =  input2 + ' '

        #print(getinputstr)
        print(input1, input2)
        self.text.insert('1.0', str+'\\n')
        self.en2.delete(0, END)

    def click_btn2(self):
        global text_content  # 声明text_content为全局变量
        text_content = (self.text.get('0.0', 'end').replace('\\n', ' ')).split()
        print(text_content)

def mainWin():
    root = Tk()
    root.title('NuContent')

    sw = root.winfo_screenwidth()
    sh = root.winfo_screenheight()
    ww = 410
    wh = 400
    x = (sw - ww)/2
    y = (sh - wh)/3
    root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
    root.resizable(False, False)
    app = Application(master=root)

    app.mainloop()