sorry i forgot to mention the question for my last post about slots.. I am calling same slots with different button by passing a value and checking what value it is and executing the relevant part in the showFileDialog method.. is it the right way to do becuase this does work but I guess their is a better way of doing it ?
On Sat, Dec 8, 2012 at 11:07 PM, Justin Israel <[email protected]>wrote: > Unless you specifically change settings on SIP, a QString is returned for > all Qt methods that return a "string" results. You have to convert it to a > python string if you want to treat it as such: > > self.scnFilePath.setText(os.path.normpath(str(fname))) > > > On Dec 8, 2012, at 9:01 AM, šãñ wrote: > > I have two browse button in the GUI as uprobably say in last image > atachment > > so instead of creating two different slot for each button click i > implemented it this way !! > # assign slots to buttons > scnFile=partial(self.showFileDialog,"scnFile") > self.browseBtn.clicked.connect(scnFile) > rndPath=partial(self.showFileDialog,"rdPath") > self.rdBtn.clicked.connect(rndPath) > > > and the showFileDialog() method as as under: > def showFileDialog(self,*args): > directory=os.path.expanduser('~') > if args[0]=="scnFile": > fname=QtGui.QFileDialog.getOpenFileName(self,'Open > File',directory) > if os.path.isfile(fname): > self.scnFilePath.setText(fname) > elif args[0]=="rdPath": > > selectedDir=QtGui.QFileDialog.getExistingDirectory(self,"Select Render > Directory",directory) > if selectedDir.isEmpty(): > print "No directory selected" > else: > self.renDir.setText(selectedDir) > > also if i try to do self.scnFilePath.setText(os.path.normpath(fname)) > > i get error saying > Traceback (most recent call last): > File "RenderUI.py", line 203, in showFileDialog > if os.path.isfile(os.path.normpath(fname)): > File "D:\Python26\lib\ntpath.py", line 417, in normpath > if path.startswith("\\"): > AttributeError: 'QString' object has no attribute 'startswith' > > > > > On Sat, Dec 8, 2012 at 4:12 AM, Justin Israel <[email protected]>wrote: > >> 1) Just set your label to have a fixed with (setFixedWidth), or make your >> other widgets size policies "expanding" so they take up any new space. >> Probably the first one though. >> >> 2) If you want an asynchronous result from your filedialog, then instead >> of using my static getExistingDirectory() suggestion, just stick with >> creating the instance like you were. If you stay with calling the exec_() >> on the dialog, you are waiting for a response anyways so you can just set >> the value on to the text box. But for the async approach, you would show() >> instead of exec_() and maybe connect the accept() signal to a slot that >> will check the value and enter it into the textedit. >> For more specific help, I would need to see an example of what you are >> trying. >> >> 3) Why would so many people recommend not using list comprehension? Just >> flat out not to use it? They are a great way to get more performance than a >> normal for loop. I can see there are misuses of them though. >> For your specific example, you would usually not want to use a list >> comprehension for side effects. That is, you shouldn't use them to append >> or call some method in a loop. They are used to produce results that you >> intend to keep. >> There really isn't much you can do to change your example. Qt would have >> needed to provide an layout.addWidgets(aList) to accept a list of widgets. >> So you just need to call them in order like you are doing. >> >> >> On Fri, Dec 7, 2012 at 1:10 PM, šãñ <[email protected]> wrote: >> >>> >>> thank you guys for pointing a solution but Now I really have a bunch of >>> more questions these are pretty basic that i know ... >>> >>> my first question is how do I keep the gridColumWidth fixed so that it >>> should not change if the label text changes(see attached image) >>> >>> my second question is how can i use a showFileDialog slot fill QLineEdit >>> for scne file for selecting directory and similarly in second tab ..(as you >>> can see in the attached screenshot I have so many browse buttons) >>> I remember seeing in the PyQt tutorial where you made use of partial but >>> i guess that was for removeCallable from OM, but now how should i find >>> QPushButton.objectName to be passed to slot so depending on what button is >>> pressed i can perform some operation... >>> >>> thirdly , so many people have recommended me not to use List >>> comprehension but i find it convenient(at least here) to use while >>> addWidget or addLayout... >>> like [p3_HBox2.addWidget(each) for each in >>> [self.pylbl,self.pyEdt,self.pybrwBtn]] >>> >>> but I have a situation when I am using a combination of addWidget >>> ,addStretch and addLayout >>> >>> like in this case >>> >>> p1_vertical.addLayout(gridLayout) >>> p1_vertical.addLayout(gridLayout2) >>> p1_vertical.addLayout(hbox) >>> p1_vertical.addWidget(hLine) >>> p1_vertical.addLayout(nxtbtnbox) >>> >>> in that case how should i after adding hbox in LC i can add >>> addWidget(hLine) then again nxtbtnbox, i feel like i can use it with >>> enumerate but is their any better option? >>> >>> >>> >>> >>> On Sat, Dec 8, 2012 at 12:30 AM, Justin Israel >>> <[email protected]>wrote: >>> >>>> If you are using your own custom status bar in a widget, then you have >>>> to connect focus or hover events to something that sets the message on the >>>> status bar. You can set the setStatusTip("") on each widget and then just >>>> read that. >>>> >>>> When you use a QMainWindow, the status bar is already wired up for you >>>> so that any time you hover a widget, the statusBar will automatically read >>>> the widgets statusTip(): >>>> >>>> app = QtGui.QApplication([]) >>>> >>>> w = QtGui.QMainWindow() >>>> button = QtGui.QPushButton("clicky", w) >>>> button.setStatusTip("I am a clicky") >>>> w.setCentralWidget(button) >>>> >>>> status = w.statusBar() >>>> >>>> w.show() >>>> w.raise_() >>>> >>>> status.showMessage("Welcome to the app!", 5000) >>>> >>>> app.exec_() >>>> >>>> For the file dialog, the way you are using it, there is a convenience >>>> static method you can call: >>>> http://qt-project.org/doc/qt-4.8/qfiledialog.html#getExistingDirectory >>>> >>>> It will return an empty string if they cancel: >>>> >>>> directory=os.path.expanduser('~') >>>> selectedDir = QtGui.QFileDialog.getExistingDirectory(w, >>>> "Select Render Directory", directory) >>>> >>>> if selectedDir.isEmpty(): >>>> print "No directory selected" >>>> else: >>>> print selectedDir >>>> >>>> >>>> On Fri, Dec 7, 2012 at 9:56 AM, Kurian O.S <[email protected]> wrote: >>>> >>>>> For Directory you want to use exec so you need to change your code >>>>> like this >>>>> >>>>> def showDirDialog(self): >>>>> directory=os.path.expanduser('~') >>>>> dirPath=QtGui.QFileDialog(self,"Select Render Directory", >>>>> directory) >>>>> dirPath.setFileMode(QtGui.QFileDialog.DirectoryOnly) >>>>> if dirPath.exec_() == 1: >>>>> fname_list = str(dirPath.selectedFiles()[0]) >>>>> print fname_list >>>>> >>>>> For changing the statusBar text you need to implement focusIn and out >>>>> Event and Justin already mention about that in reimplementQPlainText’s >>>>> focusInEvent in another source file ,how to ? thread. >>>>> >>>>> >>>>> On Fri, Dec 7, 2012 at 6:25 AM, san <[email protected]> wrote: >>>>> >>>>>> as a part of my learning PyQt4 I started making a gui(see attachment) >>>>>> where I implement all the examples I learn from video tuts or book I am >>>>>> referring, >>>>>> >>>>>> however I count figure out how should I implement the method to show >>>>>> text message on the status bar when user hover mouse over a widget[link >>>>>> to pastebin >>>>>> <http://pastebin.com/9gfYaWRV>] >>>>>> >>>>>> and secondly I dont understand how come this method to select >>>>>> Directory is not working? >>>>>> >>>>>> def showDirDialog(self): >>>>>> directory=os.path.expanduser('~') >>>>>> dirPath=QtGui.QFileDialog(self,"Select Render Directory", >>>>>> directory) >>>>>> dirPath.setFileMode(QtGui.QFileDialog.DirectoryOnly) >>>>>> >>>>>> >>>>>> -- >>>>>> view archives: http://groups.google.com/group/python_inside_maya >>>>>> change your subscription settings: >>>>>> http://groups.google.com/group/python_inside_maya/subscribe >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> --:: Kurian ::-- >>>>> >>>>> >>>>> -- >>>>> view archives: http://groups.google.com/group/python_inside_maya >>>>> change your subscription settings: >>>>> http://groups.google.com/group/python_inside_maya/subscribe >>>>> >>>> >>>> >>>> -- >>>> view archives: http://groups.google.com/group/python_inside_maya >>>> change your subscription settings: >>>> http://groups.google.com/group/python_inside_maya/subscribe >>>> >>> >>> >>> >>> -- >>> ** >>> >>> [image: San's personal blog] <http://feeds.feedburner.com/SanLuthraBlog> >>> >>> * >>> * >>> >>> >>> -- >>> view archives: http://groups.google.com/group/python_inside_maya >>> change your subscription settings: >>> http://groups.google.com/group/python_inside_maya/subscribe >>> >> >> >> -- >> view archives: http://groups.google.com/group/python_inside_maya >> change your subscription settings: >> http://groups.google.com/group/python_inside_maya/subscribe >> > > > > -- > ** > > [image: San's personal blog] <http://feeds.feedburner.com/SanLuthraBlog> > > * > * > > > -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > > > -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > -- ** [image: San's personal blog] <http://feeds.feedburner.com/SanLuthraBlog> * * -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
