اذهب إلى المحتوى
  • 0

مشكلة إغلاق البرنامج بمجرد النقر على الزر في برنامج PyQt5 مع SQLite3

Omar Mhmd

السؤال

صنعت برنامج بمكتبة pyqt5 و انشأت قاعدة بيانات بمكتبة sqlite3 

صنعت حقل ادخال و زر وصنعت اداة للزر وظيفتها انه عند الضغط على الزر الحصول على القيمة من حقل الادخال و اضافتها فى الجدول

المشكلة هى عند الضغط على الزر ينطفئ البرنامج 

ها هو الكود ارجو الحل

و الشكر لم ساعدنى 

 

#استدعاء المكتبات
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import sqlite3
#انشاء البرنامج
app = QtWidgets.QApplication(sys.argv)
#انشاء النافذة
w = QtWidgets.QWidget()
#حقول الادخال
e1 = QtWidgets.QLineEdit(w)
e1.move(200,150)
e1.resize(400,40)
e1.setStyleSheet("background-color: white ;font-size: 20px")
#الازرار
b1 = QtWidgets.QPushButton("اضافة", w)
b1.move(40,40)
b1.resize(400,50)
b1.setStyleSheet("background-color: yellow ;font-size: 24px")
# انشاء قاعدة بيانات
db = sqlite3.connect("name.db")
c = db.cursor()

c.execute("CREATE TABLE names(name TEXT)")
#الحصول على القيمة من حقول الادخال
def add():
    a1 = e1.text()
    
    e1.clear()

    cute("INSERT INTO names(name, age, add, ph) VALUES(?)",(a1))
    db.commit()


b1.clicked.connect(add) 

db.close()
w.show()
app.exec_()

 

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال ونص السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يبدو أن هنالك بضعة أخطاء في الكود الذي أرفقته، فيجب استخدام طريقة ()execute لتنفيذ استعلام SQL لإدخال القيم إلى الجدول، وعند استخدامها للإدخال يجب توفير قائمة من القيم التي تريد إدخالها، واستخدامها يكون مع إستعلام SQL لإنشاء الجدول.

لقد قمت بتصحيحه وهذا هو الكود الصحيح:

#استدعاء المكتبات
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import sqlite3

#انشاء البرنامج
app = QtWidgets.QApplication(sys.argv)

#انشاء النافذة
w = QtWidgets.QWidget()

#حقول الادخال
e1 = QtWidgets.QLineEdit(w)
e1.move(200, 150)
e1.resize(400, 40)
e1.setStyleSheet("background-color: white ;font-size: 20px")

#الازرار
b1 = QtWidgets.QPushButton("اضافة", w)
b1.move(40, 40)
b1.resize(400, 50)
b1.setStyleSheet("background-color: yellow ;font-size: 24px")

# انشاء قاعدة بيانات والجدول
db = sqlite3.connect("name.db")
c = db.cursor()

c.execute("CREATE TABLE IF NOT EXISTS names(name TEXT)")

#الحصول على القيمة من حقول الادخال واضافتها الى الجدول
def add():
    a1 = e1.text()
    e1.clear()
    c.execute("INSERT INTO names(name) VALUES(?)", (a1,))
    db.commit()

b1.clicked.connect(add) 

db.close()
w.show()
app.exec_()

بحيث قمت بتعديل الجزء الذي يضيف القيمة إلى الجدول بحيث يكون في الشكل الصحيح، كما قمت للتأكد من أن الجدول موجود بإضافة جملة: 'CREATE TABLE IF NOT EXISTS' أو يتم إنشاؤه إذا لم يكن موجودا بالفعل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

المشكلة الرئيسية هي في دالة الإضافة (add) حيث أنها تحتوي على عدة أخطاء:

  1. تحتاج إلى استدعاء الدالة execute بدلاً من cute لتنفيذ استعلام SQL.
  2. عند إجراء عملية الإدخال في قاعدة البيانات، يجب عليك توفير قيم لجميع الحقول في الجدول، وعلى ما أعتقد لديك حقل واحد فقط name، ولكن قمت بتضمين age و add و ph في الإدراج بدون توفير قيم لها، لذا، عليك إما تعديل جدول قاعدة البيانات لتناسب الحقول التي تحاول إضافتها، أو إزالة تلك الحقول من الإدراج.
  3. تحتاج إلى تعيين قيمة واحدة أو أكثر لحقول الإدراج، ولكن أنت أعطيتها قيمة واحدة فقط، قم بتعديل الاستعلام ليتضمن قيمة واحدة لحقل name فقط.
  4. لضمان إغلاق قاعدة البيانات بشكل صحيح، عليك نقل db.close() إلى نهاية دالة الإضافة بدلاً من وضعها في النهاية العامة للبرنامج.
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import sqlite3

app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()

e1 = QtWidgets.QLineEdit(w)
e1.move(200,150)
e1.resize(400,40)
e1.setStyleSheet("background-color: white ;font-size: 20px")

b1 = QtWidgets.QPushButton("اضافة", w)
b1.move(40,40)
b1.resize(400,50)
b1.setStyleSheet("background-color: yellow ;font-size: 24px")

db = sqlite3.connect("name.db")
c = db.cursor()

c.execute("CREATE TABLE IF NOT EXISTS names(name TEXT)")

def add():
    a1 = e1.text()
    e1.clear()
    c.execute("INSERT INTO names(name) VALUES(?)", (a1,))
    db.commit()
    db.close()

b1.clicked.connect(add)

w.show()
app.exec_()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يوجد بعض المشاكل في الكود الخاص بك 
أولًا، انت تستخدم دالة "cute" بدلاً من "execute" لتنفيذ استعلام SQL في قاعدة البيانات. الدالة الصحيحة هي "execute".

ثانيًا، عند فتح وإغلاق قاعدة البيانات داخل البرنامج، يفضل استخدام معرف "with" لضمان إغلاق قاعدة البيانات بشكل صحيح بعد الانتهاء من الاستخدام.

ثالثًا، ينبغي عليك تحديد الأعمدة التي تريد إدراج القيم فيها عند استخدام الاستعلام "INSERT INTO".

هذه مثال للكود بعد تصحيح الاخطاء وحل المشكله

# استدعاء المكتبات
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import sqlite3

# انشاء البرنامج
app = QtWidgets.QApplication(sys.argv)

# انشاء النافذة
w = QtWidgets.QWidget()

# حقول الادخال
e1 = QtWidgets.QLineEdit(w)
e1.move(200, 150)
e1.resize(400, 40)
e1.setStyleSheet("background-color: white ;font-size: 20px")

# الازرار
b1 = QtWidgets.QPushButton("اضافة", w)
b1.move(40, 40)
b1.resize(400, 50)
b1.setStyleSheet("background-color: yellow ;font-size: 24px")

# انشاء قاعدة البيانات والجدول
with sqlite3.connect("name.db") as db:
    c = db.cursor()
    c.execute("CREATE TABLE IF NOT EXISTS names(name TEXT)")

# الحصول على القيمة من حقول الادخال واضافتها الى الجدول
def add():
    name = e1.text()
    with sqlite3.connect("name.db") as db:
        c = db.cursor()
        c.execute("INSERT INTO names(name) VALUES(?)", (name,))
        db.commit()
    e1.clear()

b1.clicked.connect(add)

w.show()
app.exec_()

 

تم التعديل في بواسطة Taha Khalid
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...