zoenbo 发表于 2021-5-10 22:44

求教Python大佬调用问题

本帖最后由 zoenbo 于 2021-5-11 10:50 编辑

想让PY里调用同目录下config.pyc或者config.json或者其他python可以直接读取的文件内容,求助大佬们...
主要目的就是在打包成EXE后,有些内容需要改,不用再次打包

1。我想把“组合框1”里的'北京', '上海', '天津'选项放在文件里,choices里的选项从文件里读取
2。想把“组合框2”里的'男', '女', '老', '少'选项放在文件里,choices里的选项从文件里读取
3。“组合框3”里的'美女', '帅哥', '丑八怪'选项放在文件里,choices里的选项从文件里读取
4。'''注释那块想调用一段代码,比如在文件里

    def on_combobox(self, event):
      return event.GetSelection() + 1
# -*- coding:utf-8 -*-
import wx

class Frame(wx.Frame):
    def __init__(self):
      wx.Frame.__init__(self, None, title='TEST', size=(400, 300),name='frame',style=541072384)
      self.启动窗口 = wx.Panel(self)
      self.Centre()
      self.组合框1 = wx.ComboBox(self.启动窗口,value='',pos=(34, 26),name='comboBox',choices=['北京', '上海', '天津'],style=16)
      self.组合框1.SetSize((112, 23))
      self.组合框2 = wx.ComboBox(self.启动窗口,value='',pos=(34, 71),name='comboBox',choices=['男', '女', '老', '少'],style=16)
      self.组合框2.SetSize((116, 26))
      self.组合框3 = wx.ComboBox(self.启动窗口,value='',pos=(37, 114),name='comboBox',choices=['美女', '帅哥', '丑八怪'],style=16)
      self.组合框3.SetSize((119, 27))

'''
想在这块加一段代码,从文件里读取
'''

class myApp(wx.App):
    defOnInit(self):
      self.frame = Frame()
      self.frame.Show(True)
      return True

if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

咸鱼灭 发表于 2021-5-10 22:53

参数放在JSON文件里,然后用load()读取就行了

zoenbo 发表于 2021-5-10 23:13

咸鱼灭 发表于 2021-5-10 22:53
参数放在JSON文件里,然后用load()读取就行了

大佬,JSON文件是不是这样写呢?
{"AA": "'北京', '上海', '天津'", "BB": "'男', '女', '老', '少'", "CC": "'美女', '帅哥', '丑八怪'","DD":"    def on_combobox(self, event):
      return event.GetSelection() + 1"}

在PY里该怎么调用这些值呢?

seeyou_shj 发表于 2021-5-11 08:26

查一下exec函数的用法。例子:
>>> data = "a=5"
>>> exec(data)
>>> a
5
>>>

Loker 发表于 2021-5-11 08:39

# -*- coding:utf-8 -*-
import json

import wx


class Frame(wx.Frame):
    def __init__(self):
      wx.Frame.__init__(self, None, title='TEST', size=(400, 300), name='frame', style=541072384)

      self.Config = {}
      self.initJsonObj()

      self.启动窗口 = wx.Panel(self)
      self.Centre()
      self.组合框1 = wx.ComboBox(self.启动窗口, value='', pos=(34, 26), name='comboBox', choices=self.Config["组合框1"],
                              style=16)
      self.组合框1.SetSize((112, 23))
      self.组合框2 = wx.ComboBox(self.启动窗口, value='', pos=(34, 71), name='comboBox', choices=self.Config["组合框2"],
                              style=16)
      self.组合框2.SetSize((116, 26))
      self.组合框3 = wx.ComboBox(self.启动窗口, value='', pos=(37, 114), name='comboBox', choices=self.Config["组合框3"],
                              style=16)
      self.组合框3.SetSize((119, 27))

    def initJsonObj(self):
      # 设置以utf-8解码模式读取文件,encoding参数必须设置,否则默认以gbk模式读取文件,当文件中包含中文时,会报错
      f = open("config.json", encoding="utf-8")
      self.Config = json.load(f)

'''
想在这块加一段代码,从文件里读取
'''


class myApp(wx.App):
    def OnInit(self):
      self.frame = Frame()
      self.frame.Show(True)
      return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

config.json:
{
"组合框1": ["北京", "上海", "天津"],
"组合框2": ["男", "女", "老", "少"],
"组合框3": ["美女", "帅哥", "丑八怪"]
}

zoenbo 发表于 2021-5-11 08:50

本帖最后由 zoenbo 于 2021-5-11 09:10 编辑

Loker 发表于 2021-5-11 08:39
# -*- coding:utf-8 -*-
import json


大佬简直不要太帅,非常OK
'''
想在这块加一段代码,从文件里读取
'''

大佬,注释这一块我想整体替换成这个咋弄呢?就是下边这段也要让它从JSON里读取
    def on_combobox(self, event):
      return event.GetSelection() + 1

Loker 发表于 2021-5-11 09:24

zoenbo 发表于 2021-5-11 08:50
Loker 发表于 2021-5-11 08:39
# -*- coding:utf-8 -*-
import json


看不明白你的需求

zoenbo 发表于 2021-5-11 10:01

Loker 发表于 2021-5-11 09:24
看不明白你的需求

我想把这段放到那个'''注释的那一块怎么调用呢?
   def on_combobox(self, event):
      return event.GetSelection() + 1

比如把注释那块删除,我要放这段代码,这段代码也是在json文件里

Loker 发表于 2021-5-11 10:05

zoenbo 发表于 2021-5-11 10:01
我想把这段放到那个'''注释的那一块怎么调用呢?
   def on_combobox(self, event):
      return ev ...

从json文件里读取代码应该不行,只能读取文本。

zoenbo 发表于 2021-5-11 10:49

Loker 发表于 2021-5-11 10:05
从json文件里读取代码应该不行,只能读取文本。

嗯,好的,这样就行了。
页: [1]
查看完整版本: 求教Python大佬调用问题