Python NameError: global name 'resolution' is not defined
Sophia Terry
I'm working on developing a python application for Ubuntu that enables a user to have their desired resolution without requiring graphics drivers.
In order to do this I've been using xrandr.
However I've now encountered a problem, despite searching for others with similar problems and attempting the fixes.
Here is my code (I'm new to Python, this being my first application, so the code will probably be very messy and inefficient to others - I also need to relocate some of the code, but hopefully it's readable):
#!/usr/bin/python
import gtk, sys
import os, commands # enables us to use xrandr
class ResolutionX(gtk.Window): # create an instance of ResolutionX def __init__(self): # constructor super(ResolutionX, self).__init__() # set the default window values self.set_title("ResolutionX") self.set_size_request(600, 200) self.set_position(gtk.WIN_POS_CENTER) fix = gtk.Fixed() # resolution combo box 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.set_active(0) ResComboB.connect("changed", ResComboB_changed) label = gtk.Label("Resolution:") # apply button applyBtn = gtk.Button("Apply") applyBtn.set_size_request(110, 29) applyBtn.connect("clicked", applyBtn_on_clicked) # add widgets to the main window fix.put(ResComboB, 98, 78) fix.put(label, 30, 85) fix.put(applyBtn, 470, 78) self.add(fix) self.connect("destroy", gtk.main_quit) self.show_all()
def ResComboB_changed(ResComboB): string = ResComboB.get_active_text() stringRes = string.replace("x", "") echo = "echo " stringConfig = os.popen("cvt " + stringRes).readlines() # TODO: create a hidden directory in /home folder # create the file [config.sh] fWrite = open('config.sh', 'w') # write the xrandr configuration into the file so we can edit it print >> fWrite, stringConfig fWrite.close() fRead = open('config.sh', 'r') # TODO: remove last 4 characters from readString // DONE # get input from [config.sh] and edit according to the choice of resolution if (string=="1024 x 768"): for line in fRead: storedString = line readString = storedString[83:] readString = readString[:76] print readString # verification resolution = readString[:16] if (string=="1366 x 768"): for line in fRead: storedString = line readString = storedString[76:] readString = readString[:76] print readString # verification resolution = readString[:16] if (string=="1280 x 960") or (string=="1440 x 900"): for line in fRead: storedString = line readString = storedString[84:] readString = readString[:77] print readString # verification resolution = readString[:16] if (string=="1440 x 960"): for line in fRead: storedString = line readString = storedString[77:] readString = readString[:76] print readString # verification resolution = readString[:16] if (string=="1280 x 1024") or (string=="1440 x 1080") or (string=="1600 x 1200") or (string=="1920 x 1080") or (string=="1920 x 1200"): for line in fRead: storedString = line readString = storedString[85:] readString = readString[:81] print readString # verification resolution = readString[:17] os.system("xrandr --newmode " + readString) fRead.close()
def applyBtn_on_clicked(applyBtn): # detect and store monitor output type - eg. VGA1, DVI-0 monitorType = os.popen("xrandr | grep ' connected ' | awk '{ print$1 }'").readlines() fWrite = open('config.sh', 'w') print >> fWrite, monitorType fWrite.close() # get the input from [config.sh] fRead = open('config.sh', 'r') for line in fRead: CmonitorType = line fRead.close() # edit CmonitorType so we can use it CmonitorType = CmonitorType[2:] CmonitorType = CmonitorType[:7] print CmonitorType # verification os.system("xrandr --addmode " + CmonitorType + resolution)
ResolutionX()
gtk.main()I get this error: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
How can I solve this problem?
01 Answer
Make the following changes to your script:
Below line def ResComboB_changed(ResComboB): add the following to it, so it looks like this:
def ResComboB_changed(ResComboB): global resolutionor add resolution = "" above the def line like this:
resolution = ""
def ResComboB_changed(ResComboB):Hope that helps ;)
1