Python NameError:全局名称“resolution”未定义

Python NameError:全局名称“resolution”未定义

我正在为 Ubuntu 开发一个 Python 应用程序,使用户无需图形驱动程序即可获得所需的分辨率。
为了做到这一点,我一直在使用xrandr
然而,尽管我搜索了其他有类似问题的人并尝试修复,但现在我遇到了一个问题

。这是我的代码(我是 Python 新手,这是我的第一个应用程序,所以代码对其他人来说可能非常混乱和低效 - 我还需要重新定位一些代码,但希望它是可读的):

/usr/bin/python 的 #!

导入 gtk、系统
import os, 命令 # 使我们能够使用 xrandr

类ResolutionX(gtk.Window):

    # 创建 ResolutionX 的实例
    def __init__(self):
        # 构造函数
        超级(ResolutionX,self)。__init__()

        # 设置默认窗口值
        self.set_title(“ResolutionX”)
        自我设置大小请求(600,200)
        自我设置位置(gtk.WIN_POS_CENTER)

        修复 = gtk.Fixed()

        # 分辨率组合框
        ResComboB = gtk.combo_box_new_text()
        ResComboB.append_text('1024 x 768')
        ResComboB.append_text('1280 x 960')
        ResComboB.append_text('1366 x 768')
        ResComboB.append_text('1280 x 1024')
        ResComboB.append_text('1440 x 900')
        ResComboB.append_text('1440 x 960')
        ResComboB.append_text('1440 x 1080')
        ResComboB.append_text('1600 x 1200')
        ResComboB.append_text('1920 x 1080')
        ResComboB.append_text('1920 x 1200')
        ResComboB.设置活动(0)
        ResComboB.connect("已更改", ResComboB_changed)

        label = gtk.Label("分辨率:")

        # 应用按钮
        applyBtn = gtk.Button("应用")
        applyBtn.set_size_request(110,29)
        applyBtn.connect("点击", applyBtn_on_clicked)

        # 将小部件添加到主窗口
        修复.put(ResComboB,98,78)
        修复.put(标签,30,85)
        修复.put(applyBtn,470,78)
        自我添加(修复)

        自我连接(“destroy”,gtk.main_quit)
        自我.显示全部()


def ResComboB_changed(ResComboB):
    字符串 = ResComboB.get_active_text()
    stringRes = string.replace("x", "")
    回显 = “回显”
    stringConfig = os.popen("cvt " + stringRes).readlines()

    # TODO:在 /home 文件夹中创建一个隐藏目录

    #创建文件[config.sh]
    fWrite = open('config.sh','w')
    # 将 xrandr 配置写入文件中,以便我们可以编辑它
    打印>> fWrite,stringConfig
    fWrite.关闭()

    fRead = open('config.sh','r')

    # TODO:从 readString 中删除最后 4 个字符 // DONE

    # 从[config.sh]获取输入并根据分辨率的选择进行编辑
    如果(字符串==“1024 x 768”):
        对于 fRead 中的行:
            存储字符串 = 行
            读取字符串 = 存储字符串[83:]
            读取字符串 = 读取字符串[:76]
            print readString #验证
            分辨率 = 读取字符串[:16]
    如果(字符串==“1366 x 768”):
        对于 fRead 中的行:
            存储字符串 = 行
            读取字符串 = 存储字符串[76:]
            读取字符串 = 读取字符串[:76]
            print readString #验证
            分辨率 = 读取字符串[:16]
    如果(字符串==“1280 x 960”)或(字符串==“1440 x 900”):
        对于 fRead 中的行:
            存储字符串 = 行
            读取字符串 = 存储字符串[84:]
            读取字符串 = 读取字符串[:77]
            print readString #验证
            分辨率 = 读取字符串[:16]
    如果(字符串==“1440 x 960”):
        对于 fRead 中的行:
            存储字符串 = 行
            读取字符串 = 存储字符串[77:]
            读取字符串 = 读取字符串[:76]
            print readString #验证
            分辨率 = 读取字符串[:16]
    如果(字符串=="1280 x 1024")或(字符串=="1440 x 1080")或(字符串=="1600 x 1200")或(字符串=="1920 x 1080")或(字符串=="1920 x 1200"):
        对于 fRead 中的行:
            存储字符串 = 行
            读取字符串 = 存储字符串[85:]
            读取字符串 = 读取字符串[:81]
            print readString #验证
            分辨率 = 读取字符串[:17]
    os.system("xrandr --newmode " + readString)

    fRead.close()

def applyBtn_on_clicked(applyBtn):

    # 检测并存储显示器输出类型 - 例如 VGA1、DVI-0
    monitorType = os.popen("xrandr | grep ' 已连接 ' | awk '{ print$1 }'").readlines()
    fWrite = open('config.sh','w')
    打印>>fWrite,monitorType
    fWrite.关闭()
    # 从[config.sh]获取输入
    fRead = open('config.sh','r')
    对于 fRead 中的行:
        CmonitorType = 线
    fRead.close()
    # 编辑 CmonitorType 以便我们可以使用它
    CmonitorType = CmonitorType[2:]
    CmonitorType = CmonitorType[:7]
    打印 CmonitorType#验证

    os.system("xrandr --addmode " + CmonitorType + 分辨率)

分辨率X()
gtk.main()

我收到此错误:
Traceback (most recent call last): File "file.py", line 129, in applyBtn_on_clicked os.system("xrandr --addmode " + CmonitorType + resolution) NameError: global name 'resolution' is not defined

我怎么解决这个问题?

答案1

对脚本进行以下更改:

在下面的代码行def ResComboB_changed(ResComboB):中添加以下内容,使其看起来像这样:

def ResComboB_changed(ResComboB):
    global resolution

或者resolution = ""在 def 行上面添加如下内容:

resolution = ""
def ResComboB_changed(ResComboB):

希望有帮助;)

相关内容