So today I made a basic design of PyQt4 GUI , its pretty basic at the moment.
See screenshot below.
I have made a design on paper first before starting up with this and some other references & thinking what can be more user friendly. Here is the code below:
1: from PyQt4 import QtCore,QtGui
2:
3: import sys
4:
5: class Window(QtGui.QWidget):
6: def __init__(self,*args,**kwargs):
7: super(Window,self).__init__(*args,**kwargs)
8:
9: self.setWindowTitle("Test")
10: self.resize(500,300)
11: self.setMinimumSize(500,300)
12: self.setMaximumSize(500,300)
13: self.filepath=""
14: self.createUI()
15:
16: def createUI(self):
17: quitAction=QtGui.QAction('&Exit',self)
18: quitAction.triggered.connect(QtGui.qApp.quit)
19:
20: fileMenu=QtGui.QMenuBar()
21:
22: phile=fileMenu.addMenu('&File')
23:
24: phile.addAction(quitAction)
25:
26: # initialize tab widget
27: tab_widget = QtGui.QTabWidget()
28: # Everything will go inside the below QWidgets
29: tab1 = QtGui.QWidget()
30: tab2 = QtGui.QWidget()
31:
32: p1_vertical = QtGui.QVBoxLayout(tab1)
33: p2_vertical = QtGui.QVBoxLayout(tab2)
34:
35: tab_widget.addTab(tab1, "Task")
36: tab_widget.addTab(tab2, "Task List")
37:
38: gridLayout = QtGui.QGridLayout()
39: label=QtGui.QLabel("Scene File")
40: gridLayout.addWidget(label,0,0)
41: self.scnFilePath=QtGui.QLineEdit()
42: gridLayout.addWidget(self.scnFilePath,0,1)
43: browseBtn=QtGui.QPushButton("Browse")
44: gridLayout.addWidget(browseBtn,0,2)
45: dirlabel=QtGui.QLabel("Render Directory")
46: gridLayout.addWidget(dirlabel,1,0)
47: self.renDir=QtGui.QLineEdit()
48: gridLayout.addWidget(self.renDir,1,1)
49: rdBtn=QtGui.QPushButton("Browse")
50: gridLayout.addWidget(rdBtn,1,2)
51:
52: gridLayout2=QtGui.QGridLayout()
53: #First Row
54: sfLbl=QtGui.QLabel("Start Frame")
55: gridLayout2.addWidget(sfLbl,0,0)
56: sfEdt=QtGui.QLineEdit()
57: gridLayout2.addWidget(sfEdt,0,1)
58: eflbl=QtGui.QLabel("End Frame")
59: gridLayout2.addWidget(eflbl,0,2)
60: efEdt=QtGui.QLineEdit()
61: gridLayout2.addWidget(efEdt,0,3)
62: byfrlbl=QtGui.QLabel("Interval")
63: gridLayout2.addWidget(byfrlbl,0,4)
64: byfrEdt=QtGui.QLineEdit()
65: gridLayout2.addWidget(byfrEdt,0,5)
66: rndlbl=QtGui.QLabel("Renderer")
67: #Second Row
68: gridLayout2.addWidget(rndlbl,1,0)
69: rndCB=QtGui.QComboBox()
70: gridLayout2.addWidget(rndCB,1,1)
71: camlbl=QtGui.QLabel("Select Camera")
72: gridLayout2.addWidget(camlbl,1,2)
73: camCB=QtGui.QComboBox()
74: gridLayout2.addWidget(camCB,1,3)
75: fmtlbl=QtGui.QLabel("Format")
76: gridLayout2.addWidget(fmtlbl,1,4)
77: fmtCB=QtGui.QComboBox()
78: gridLayout2.addWidget(fmtCB,1,5)
79:
80: hbox=QtGui.QHBoxLayout()
81: rgbchkBox=QtGui.QCheckBox("RGB")
82: alpchkBox=QtGui.QCheckBox("Alpha")
83: depchkBox=QtGui.QCheckBox("Z-Depth")
84:
85: hbox.addWidget(rgbchkBox)
86: hbox.addWidget(alpchkBox)
87: hbox.addWidget(depchkBox)
88: hbox.addStretch(1)
89:
90: # assign slots to buttons
91: browseBtn.clicked.connect(self.showFileDialog)
92: rdBtn.clicked.connect(self.showDirDialog)
93:
94: # add layouts that contain widgets
95: p1_vertical.addLayout(gridLayout)
96: p1_vertical.addLayout(gridLayout2)
97: p1_vertical.addLayout(hbox)
98:
99:
100:
101: vbox = QtGui.QVBoxLayout()
102: vbox.addWidget(fileMenu)
103: vbox.addWidget(tab_widget)
104:
105:
106: self.setLayout(vbox)
107:
108: def showFileDialog(self):
109: fname=QtGui.QFileDialog.getOpenFileName(self,'Open File',
110: 'c:\=')
111: self.scnFilePath.setText(fname)
112: ## phileHandle=open(fname,'r')
113: ## with phileHandle:
114: ## data=phileHandle.read()
115: def showDirDialog(self):
116: pass
117:
118:
119:
120: if __name__ =='__main__':
121: app = QtGui.QApplication(sys.argv)
122: app.setStyle("cleanlooks")
123: win = Window()
124: win.show()
125: sys.exit(app.exec_())
126: else:
127: win = Window()
128: win.show()