الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن FileDialog في مكتبة pyqt

بدأه star_20011 في 26 ديسمبر 2013 · 14 رد · 653 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

انا واجهة رسومية ببرنامج pyqt

 

وضعت فيها زر Browse لحفظ ملف

 

بجانب زر Browse يوجد خانة كتابة لوضع مسار الملف ( كما في البرامج الأخرى )

 

لكن المشكله ان الزر لا يعمل ( لا تظهر نافذة تحديد الملف )

 

هذا هو الكود

def setSaveFileName(self):    
        fileName = QtGui.QFileDialog.getSaveFileName(self, "Select file", self.path_line.text(), "All Files (*);;Text Files (*.txt)")
        if fileName:
            self.path_line.setText(fileName)
        return fileName

الآن الواجهه تعمل لكن في حالة الضغط على زر Browse لا تظهر نافذة تحديد الملف ويظهر هذا الخطأ

 

 

fileName = QtGui.QFileDialog.getSaveFileName(self, "Select file", self.path_line.text(), "All Files (*);;Text Files (*.txt)")
TypeError: QFileDialog.getSaveFileName(QWidget parent=None, str caption='', str directory='', str filter='', QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_MainWindow'
 
 
 
ما الحل ؟
#2

مالذي تريد حفظه ؟ من أين يتم جلبه line edit or what !!

 

و بأي صيغة 

تم تعديل هذه المشاركة بواسطة Amin0u في 26 ديسمبر 2013 في 23:56

#3
Amin0u كتب:

مالذي تريد حفظه ؟ من أين يتم جلبه line edit or what !!

 

و بأي صيغة 

 

ما يهم الصيغه ( بإمكاني اغير الصيغه بأي صيغه ثانيه احتاجها في برنامجي )

 

getSaveFileName

 

هذا لفتح file dialog لتحديد مسار حفظ الملف

 

و line edit لعرض مسار الملف

 

كمثال

 

http://vimalkumar.files.wordpress.com/2011/10/sphinx-build-qt.png

 

 

المشكله ان file dialog لا يعمل بسبب هذا الخطأ

fileName = QtGui.QFileDialog.getSaveFileName(self, "Select file", self.path_line.text(), "All Files (*);;Text Files (*.txt)")
TypeError: QFileDialog.getSaveFileName(QWidget parent=None, str caption='', str directory='', str filter='', QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_MainWindow'

ما العمل ؟

#4

اذا كان fichier text هذه طريقة

filename = QtGui.QFileDialog.getSaveFileName(self, 'Save File', '.')
fname = open(filename, 'w')
fname.write(textEdit.toPlainText())
fname.close()

تأخد النص من  text edit

#5

مثال لحفظ  كتابة كتبت في line edit و كتابتها في ملف تكست

 

صورة : post-275853-0-28018500-1388098690_thumb.

import sys
from PyQt4 import  QtGui
from PyQt4.QtCore import *

class shower(QtGui.QWidget):
  
    def __init__(self):
        super(shower,self).__init__()
        self.btn=QtGui.QPushButton('save it ',self)
        self.btn.move(10,50)
        self.li = QtGui.QLineEdit(self)
        self.li.setGeometry(QRect(10, 10, 351, 31))
        self.connect(self.btn,SIGNAL("clicked()"),self.save)

    def save(self):
        fname=QtGui.QFileDialog.getSaveFileName(self, 'Save','.txt')
        fn = open(fname, 'w')
        fn.write(self.li.text())
        fn.close()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win= shower()
    win.show()

تم تعديل هذه المشاركة بواسطة Amin0u في 27 ديسمبر 2013 في 01:59

#6

شكرا لك أخي

 

لكن للأسف لا يعمل ويظهر نفس المشكله

TypeError: QFileDialog.getSaveFileName(QWidget parent=None, str caption='', str directory='', str filter='', QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_MainWindow'
#7

ممكن وضع الكود لأرى مالذي كتبته

#8

تفضل

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'fff.ui'
#
# Created: Sun Dec 22 20:56:01 2013
#      by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost!

import sys

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(580, 189)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 20, 41, 31))
        self.label.setAutoFillBackground(False)
        self.label.setScaledContents(False)
        self.label.setWordWrap(False)
        self.label.setObjectName(_fromUtf8("label"))
        self.url_line = QtGui.QLineEdit(self.centralwidget)
        self.url_line.setGeometry(QtCore.QRect(70, 20, 491, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.url_line.setFont(font)
        self.url_line.setObjectName(_fromUtf8("url_line"))
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 70, 41, 25))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.path_line = QtGui.QLineEdit(self.centralwidget)
        self.path_line.setGeometry(QtCore.QRect(70, 70, 421, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.path_line.setFont(font)
        self.path_line.setObjectName(_fromUtf8("path_line"))
        self.browse_btn = QtGui.QToolButton(self.centralwidget)
        self.browse_btn.setGeometry(QtCore.QRect(500, 70, 60, 31))
        self.browse_btn.setObjectName(_fromUtf8("browse_btn"))
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(30, 124, 55, 31))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.times_line = QtGui.QLineEdit(self.centralwidget)
        self.times_line.setGeometry(QtCore.QRect(120, 120, 141, 41))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.times_line.setFont(font)
        self.times_line.setObjectName(_fromUtf8("times_line"))
        self.close_btn = QtGui.QToolButton(self.centralwidget)
        self.close_btn.setGeometry(QtCore.QRect(430, 120, 61, 41))
        self.close_btn.setObjectName(_fromUtf8("close_btn"))
        self.start_btn = QtGui.QToolButton(self.centralwidget)
        self.start_btn.setGeometry(QtCore.QRect(310, 120, 61, 41))
        self.start_btn.setAutoRaise(False)
        self.start_btn.setObjectName(_fromUtf8("start_btn"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.close_btn, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.close)
        

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        QtCore.QObject.connect(self.browse_btn, QtCore.SIGNAL("clicked()"),self.setSaveFileName)

    def setSaveFileName(self):    
        fileName = QtGui.QFileDialog.getSaveFileName(self, 'Save File', '.txt')
        if fileName:
            self.path_line.setText(fileName)
        return fileName 
   

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">URL</span></p></body></html>", None))
        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">save</span></p></body></html>", None))
        self.browse_btn.setText(_translate("MainWindow", "Browse...", None))
        self.label_3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Times</span></p></body></html>", None))
        self.close_btn.setText(_translate("MainWindow", "Close", None))
        self.start_btn.setText(_translate("MainWindow", "Start", None))
        
class MyApp(QtGui.QMainWindow,Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        

        
if __name__=="__main__":
    app=QtGui.QApplication(sys.argv)
    w=MyApp()
    w.show()
    app.exec_()

الكود مجرد واجهه ولم أضع باقي الأكواد لكي يعمل بالشكل المطلوب

 

لكن واجهتني مشكلة file dialog 

 

وشكرا

#9
def setSaveFileName(self):    
        fileName = QtGui.QFileDialog.getSaveFileName(self, 'Save File', '.txt')
        if fileName:
            self.path_line.setText(fileName)
        return fileName

لم تغيره أخي ؟

#10
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'fff.ui'
#
# Created: Sun Dec 22 20:56:01 2013
#      by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost!

import sys

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(580, 189)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 20, 41, 31))
        self.label.setAutoFillBackground(False)
        self.label.setScaledContents(False)
        self.label.setWordWrap(False)
        self.label.setObjectName(_fromUtf8("label"))
        self.url_line = QtGui.QLineEdit(self.centralwidget)
        self.url_line.setGeometry(QtCore.QRect(70, 20, 491, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.url_line.setFont(font)
        self.url_line.setObjectName(_fromUtf8("url_line"))
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 70, 41, 25))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.path_line = QtGui.QLineEdit(self.centralwidget)
        self.path_line.setGeometry(QtCore.QRect(70, 70, 421, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.path_line.setFont(font)
        self.path_line.setObjectName(_fromUtf8("path_line"))
        self.browse_btn = QtGui.QToolButton(self.centralwidget)
        self.browse_btn.setGeometry(QtCore.QRect(500, 70, 60, 31))
        self.browse_btn.setObjectName(_fromUtf8("browse_btn"))
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(30, 124, 55, 31))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.times_line = QtGui.QLineEdit(self.centralwidget)
        self.times_line.setGeometry(QtCore.QRect(120, 120, 141, 41))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.times_line.setFont(font)
        self.times_line.setObjectName(_fromUtf8("times_line"))
        self.close_btn = QtGui.QToolButton(self.centralwidget)
        self.close_btn.setGeometry(QtCore.QRect(430, 120, 61, 41))
        self.close_btn.setObjectName(_fromUtf8("close_btn"))
        self.start_btn = QtGui.QToolButton(self.centralwidget)
        self.start_btn.setGeometry(QtCore.QRect(310, 120, 61, 41))
        self.start_btn.setAutoRaise(False)
        self.start_btn.setObjectName(_fromUtf8("start_btn"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.close_btn, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.close)


        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        QtCore.QObject.connect(self.browse_btn, QtCore.SIGNAL("clicked()"),self.setSaveFileName)

    def setSaveFileName(self):
        fileName = QtGui.QFileDialog.getSaveFileName(self, 'Save File', '.txt')
        if fileName:
            self.path_line.setText(fileName)
        return fileName


    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">URL</span></p></body></html>", None))
        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">save</span></p></body></html>", None))
        self.browse_btn.setText(_translate("MainWindow", "Browse...", None))
        self.label_3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Times</span></p></body></html>", None))
        self.close_btn.setText(_translate("MainWindow", "Close", None))
        self.start_btn.setText(_translate("MainWindow", "Start", None))

class MyApp(QtGui.QMainWindow,Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)




if __name__=="__main__":
    app=QtGui.QApplication(sys.argv)
    w=MyApp()
    w.show()
    app.exec_()

 تعديل الكود  الأن هم شغال

 

المشكلة كانت هنا

 

self.ui = Ui_MainWindow()

self.ui.setupUi(self)

 

حذفت السطر الأول لان الكلاس الثاني يرث كل شيء عن الكلاس الأول

 

و نستدعي الدالة مباشرة لتصبح

 

self.setupUi(self)

 

عند انتهائك من البرنامج حبذا لو تبادلت معنا أفكارك  

 

تحياتي 

#11

يعمل الآن !!

 

ألف شكر لك أخي

 

البرنامج فقط لإستعمال شخصي ( جلب معلومات من مواقع بعد إعادة التوجيه )

 

بعد انتهائي منه سيتم عمل برنامج آخر فقط للتعلم على طريقة استخدام المكتبه

 

وأتمنى منك عمل دروس لطريقة عمل البرنامج داخل كلاس الواجهه و عمل برنامج في كلاس آخر يختلف عن كلاس الواجهه وربطهم مع بعض

 

لأن الدروس العربيه في pyqt شبه معدومه

 

وشكرا لك

#12

ان شاء الله  :)

 

اي مكتبى تستعمل urllib ؟

 

لاني لازلت لم أفهم طريقة استخراج المعلومات من المواقع

 

^_^

#13

انا لا استخرج شي

 

فقط استخراج رابط الموقع بعد التوجيه

 

صحيح urllib

 

بالتحديد from urllib.request import urlopen

 

هذي الأكواد

url = ''

u = urlopen(url)

file = open('file.txt', 'a')

file.write(u.geturl() + '\n')

file.close()

مع العلم اني استخدم python3.3

 

وانا أحاول اعمل اي برنامج فقط للتدريب

 

والآن دخلت البرمجه الرسوميه وأحاول اعمل واجهات رسوميه لكل البرامج اللي عملتها

#14

ah ok

 

شكرا على المعلومة 

 

أنا أجيد هذا لكن لازلت ناقص بكثير من جانب الشبكات و الويب

#15
Amin0u كتب:

ah ok

 

شكرا على المعلومة 

 

أنا أجيد هذا لكن لازلت ناقص بكثير من جانب الشبكات و الويب

 

العفو

 

انا مستواي متوسط في البايثون 

 

وتقريبا اعرف كل شي عن البايثون الا الكلاسات الى الآن ما فهمت لها خصوصا self

 

وصعوبتي فيها بسبب اني ما اعرف قيمتها او القيمه اللي راح تنقلها بين الفنكشنز

 

وكيفية استخدام الكلاس وربطه مع كلاس آخر ( بعض الأكواد ما فهمتها )

 

وانا مثلك لا اجيدها 

 

ويجب ان نقرأ عن المكتبات ووظائفها عشان تسهل علينا معرفة ماذا نحتاج منها

 

بالتوفيق ان شاء الله

مواضيع مشابهة