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

طلب مساعدة في كتابة اول برنامج لي (الة حاسبة باستخدام PySide )

بدأه اسلام مصطفي في 17 يوليو 2011 · 26 رد · 2,897 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

يُعتبر هذا اول برنامج لي و اطبق فيه ما تعلمته ،

ما اريد ان انجزه هو الة بهذا الشكل

http://player.vimeo.com/video/15021714?title=0&byline=0&color=57597f

ما يقف امامي هو ال PySide حيث لا استطيع ان اجد اي دروس او تمارين لها، استخدم ال Online Reference لكن لم استطع فهم كل شئ. يقف امامي كيفية تلوين الخلفية او تلوين الأزرار، ايضا كيفية عمل Border للأزرار و تلوينه ( الأزرار Flat ) و كيف أجعل الأزار حادة الأطراف و ليست علي شكل منحني (اي زر مستطيل تماماً).

ما يقف امامي في بايثون هو

def makeButton(self, buttonName, layoutName):
        self.button = QPushButton('%s' % buttonName)
        self.button.setFlat(1)
        layoutName.addWidget(self.button)
        return self.button

هذه دالة تقوم بانشاء ازرار جديدة، اريد ان اربط كل زر بالشاشة: عند الضغط علي الزر يظهر الرقم علي الشاشة ، و لكني لا اعرف اسم المتغير لكل رقم ، لفهم ما كتبته أكثر سأضع الكود كاملاً

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class Cal(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, None)

        ##Main Window##
        self.setWindowTitle("Simple Calculator")
        self.setMaximumSize(300,370)
        self.setMinimumSize(300,370)

        ##Layout##
        Grid = QVBoxLayout()
        self.screenLayout = QHBoxLayout()
        self.underScreen = QHBoxLayout()
        self.Lay1 = QHBoxLayout()
        self.Lay2 = QHBoxLayout()
        self.Lay3 = QHBoxLayout()
        self.Lay4 = QHBoxLayout()
        self.opLay = QHBoxLayout()
        Grid.addLayout(self.screenLayout)
        Grid.addLayout(self.underScreen)
        Grid.addLayout(self.opLay)
        Grid.addLayout(self.Lay1) 
        Grid.addLayout(self.Lay2)
        Grid.addLayout(self.Lay3)
        Grid.addLayout(self.Lay4)
        self.setLayout(Grid)

        ##Fonts##
        sansFont = QFont('Arial', 9)

        ##Screen##
        self.Screen = QLineEdit()
        self.Screen.setMaximumSize(290, 45)
        self.Screen.setText("0")
        self.Screen.setFocus()
        self.Screen.setFont(sansFont)
        self.screenLayout.addWidget(self.Screen)

        ##Layout Under Screen##
        self.historyButton = QPushButton('History')
        self.historyButton.setFlat(1)
        self.emptyButton = QPushButton('')
        self.emptyButton.setFlat(1)
        self.clearButton = QPushButton('Clr')
        self.clearButton.setFlat(1)
        self.underScreen.addWidget(self.historyButton)
        self.underScreen.addWidget(self.emptyButton)
        self.underScreen.addWidget(self.clearButton)

        ##Functions to start##
        self.doButton()
        self.doEvent()

    ##Making New Buttons##
    def makeButton(self, buttonName, layoutName):
        self.button = QPushButton('%s' % buttonName)
        self.button.setFlat(1)
        layoutName.addWidget(self.button)
        return self.button

    def doButton(self):
        n1 = ['7','8','9','/']
        n2 = ['4','5','6','*']
        n3 = ['1','2','3','-']
        n4 = ['.','0','=','+']
        ops = ['-/+','!','^','%']

        for i in n1:
            self.makeButton(i, self.Lay1)

        for i in n2:
            self.makeButton(i, self.Lay2)

        for i in n3:
            self.makeButton(i, self.Lay3)

        for i in n4:
            self.makeButton(i, self.Lay4)

        for op in ops:
            self.makeButton(op, self.opLay)



    ##Events and Connections##
    def doEvent(self):
        self.connect(self.clearButton, SIGNAL('clicked()'), self.Screen, SLOT('clear()'))
        self.connect(self.button, SIGNAL('clicked()'), self.Screen, SLOT('insert(1)'))



if __name__ == '__main__':
    App = QApplication(sys.argv)
    App.setStyle("Mac")
    cal = Cal()
    cal.show()
    App.exec_()
    sys.exit()

ارحب بأي ملاحظات او تعديلات علي الكود

شكرا مقدما

#2

السلام عليكم

ممكن تستخدم مصفوفة لمكونات الأرقام وتعمل for و enumerate فناتجها هيكون عنصر المصفوفة والترتيب له فتقدر تستخدم الترتيب في ال slot

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

السلام عليكم : لاني اول مرة اجد من يسأل كيف يكون السؤال في منتدى كهذا

المحاولة , شرح المشكلة "هو ده الكلام" !!

نفس اللي اتفضل بيه الاستاذ احمد يوسف العناصر في ايترابل (Dictionary ) المعرف قبل الـ constructor بـ {}

بعض التعديلات معظمها عن استفساراتك - اتمنى اراك تتابع الموضوع للنهاية -

واي اسفسار حاضرين

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class screen(QLineEdit):
	def __init__(self, parent=None):
		QLineEdit.__init__(self, None)
		self.setMaximumSize(290, 65)
		self.setText("0")
		self.setFocus()
		self.setStyleSheet("border-radius:5px;border-style: outset;border-color: black;border-width:2px;color:#91F259;background-color:#1DB76A;")
		##Fonts##
		sansFont = QFont('impact', 25)
		sansFont.setStretch(65)
		self.setFont(sansFont)

	@Slot('void')
	def insert(self):
		buttText = self.sender().text()
		if  (self.sender().text()) in ".0123456789" :
			""""""
		else:
			buttText = " "  + buttText +" "
		if self.text() =="0": 
			self.setText( buttText)
		else:
			self.setText( self.text() + buttText  )

class Cal(QWidget):
	buttons = {}
	Layoyts ={}
	def __init__(self, parent=None):
		QWidget.__init__(self, None)

		##Main Window##
		self.setWindowTitle("Simple Calculator")
		self.setMaximumSize(300,370)
		self.setMinimumSize(300,370)
		self.setStyleSheet("color:#555;border-radius:5px;border-style: outset;border-color: black;border-width:2px;")

		##Layout##
		Grid = QVBoxLayout()
		self.Layoyts['screenLayout'] = QHBoxLayout()
		self.Layoyts['underScreen'] = QHBoxLayout()
		self.Layoyts[0] = QHBoxLayout()
		self.Layoyts[1] = QHBoxLayout()
		self.Layoyts[2] = QHBoxLayout()
		self.Layoyts[3] = QHBoxLayout()
		self.Layoyts[4] = QHBoxLayout()

		Grid.addLayout(self.Layoyts['screenLayout'])
		Grid.addLayout(self.Layoyts['underScreen'])
		Grid.addLayout(self.Layoyts[0]) 
		Grid.addLayout(self.Layoyts[1]) 
		Grid.addLayout(self.Layoyts[2])
		Grid.addLayout(self.Layoyts[3])
		Grid.addLayout(self.Layoyts[4])

		self.setLayout(Grid)



		##Screen##
		self.Screen = screen()
		self.Layoyts['screenLayout'].addWidget(self.Screen)

		##Layout Under Screen##
		self.historyButton = QPushButton('History')
		self.historyButton.setFlat(1)
		self.emptyButton = QPushButton('')
		self.emptyButton.setFlat(1)
		self.clearButton = QPushButton('Clr')
		self.clearButton.setFlat(1)
		self.Layoyts['underScreen'].addWidget(self.historyButton)
		self.Layoyts['underScreen'].addWidget(self.emptyButton)
		self.Layoyts['underScreen'].addWidget(self.clearButton)

		##Functions to start##
		self.doButton()
		self.doEvent()


	##Making New Buttons##
	def makeButton(self, buttonName, layoutName):
		button = QPushButton('%s' % buttonName)
		button.setStyleSheet("border-style: outset;border-color: black;border-width:2px;width:75px;height:100px;font: bold 25px;color:#eee;background-color:#666;border-radius:5px;")
		layoutName.addWidget(button)
		return button

	def doButton(self):
		n1 = ['7','8','9','/','4','5','6','*','1','2','3','-','.','0','=','+','-/+','!','^','%']


		for i in range(len(n1)):
			self.buttons[n1] = self.makeButton(n1, self.Layoyts[ (i / 4)])


	##Events and Connections##
	def doEvent(self):
		self.connect(self.clearButton, SIGNAL('clicked()'), self.Screen, SLOT('clear()'))
		for i in self.buttons.keys() :
			self.connect(self.buttons, SIGNAL('clicked()'), self.Screen, SLOT('insert()'))



if __name__ == '__main__':
	App = QApplication(sys.argv)
	#App.setStyle("Mac")
	cal = Cal()
	cal.show()
	App.exec_()
	sys.exit()

تم تعديل هذه المشاركة بواسطة ihope في 18 يوليو 2011 في 05:23

1

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#4
ihope كتب:

السلام عليكم : لاني اول مرة اجد من يسأل كيف يكون السؤال في منتدى كهذا

المحاولة , شرح المشكلة "هو ده الكلام" !!

نفس اللي اتفضل بيه الاستاذ احمد يوسف العناصر في ايترابل (Dictionary ) المعرف قبل الـ constructor بـ {}

بعض التعديلات معظمها عن استفساراتك - اتمنى اراك تتابع الموضوع للنهاية -

واي اسفسار حاضرين

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class screen(QLineEdit):
	def __init__(self, parent=None):
		QLineEdit.__init__(self, None)
		self.setMaximumSize(290, 65)
		self.setText("0")
		self.setFocus()
		self.setStyleSheet("border-radius:5px;border-style: outset;border-color: black;border-width:2px;color:#91F259;background-color:#1DB76A;")
		##Fonts##
		sansFont = QFont('impact', 25)
		sansFont.setStretch(65)
		self.setFont(sansFont)

	@Slot('void')
	def insert(self):
		buttText = self.sender().text()
		if  (self.sender().text()) in ".0123456789" :
			""""""
		else:
			buttText = " "  + buttText +" "
		if self.text() =="0": 
			self.setText( buttText)
		else:
			self.setText( self.text() + buttText  )

class Cal(QWidget):
	buttons = {}
	Layoyts ={}
	def __init__(self, parent=None):
		QWidget.__init__(self, None)

		##Main Window##
		self.setWindowTitle("Simple Calculator")
		self.setMaximumSize(300,370)
		self.setMinimumSize(300,370)
		self.setStyleSheet("color:#555;border-radius:5px;border-style: outset;border-color: black;border-width:2px;")

		##Layout##
		Grid = QVBoxLayout()
		self.Layoyts['screenLayout'] = QHBoxLayout()
		self.Layoyts['underScreen'] = QHBoxLayout()
		self.Layoyts[0] = QHBoxLayout()
		self.Layoyts[1] = QHBoxLayout()
		self.Layoyts[2] = QHBoxLayout()
		self.Layoyts[3] = QHBoxLayout()
		self.Layoyts[4] = QHBoxLayout()

		Grid.addLayout(self.Layoyts['screenLayout'])
		Grid.addLayout(self.Layoyts['underScreen'])
		Grid.addLayout(self.Layoyts[0]) 
		Grid.addLayout(self.Layoyts[1]) 
		Grid.addLayout(self.Layoyts[2])
		Grid.addLayout(self.Layoyts[3])
		Grid.addLayout(self.Layoyts[4])

		self.setLayout(Grid)



		##Screen##
		self.Screen = screen()
		self.Layoyts['screenLayout'].addWidget(self.Screen)

		##Layout Under Screen##
		self.historyButton = QPushButton('History')
		self.historyButton.setFlat(1)
		self.emptyButton = QPushButton('')
		self.emptyButton.setFlat(1)
		self.clearButton = QPushButton('Clr')
		self.clearButton.setFlat(1)
		self.Layoyts['underScreen'].addWidget(self.historyButton)
		self.Layoyts['underScreen'].addWidget(self.emptyButton)
		self.Layoyts['underScreen'].addWidget(self.clearButton)

		##Functions to start##
		self.doButton()
		self.doEvent()


	##Making New Buttons##
	def makeButton(self, buttonName, layoutName):
		button = QPushButton('%s' % buttonName)
		button.setStyleSheet("border-style: outset;border-color: black;border-width:2px;width:75px;height:100px;font: bold 25px;color:#eee;background-color:#666;border-radius:5px;")
		layoutName.addWidget(button)
		return button

	def doButton(self):
		n1 = ['7','8','9','/','4','5','6','*','1','2','3','-','.','0','=','+','-/+','!','^','%']


		for i in range(len(n1)):
			self.buttons[n1] = self.makeButton(n1, self.Layoyts[ (i / 4)])


	##Events and Connections##
	def doEvent(self):
		self.connect(self.clearButton, SIGNAL('clicked()'), self.Screen, SLOT('clear()'))
		for i in self.buttons.keys() :
			self.connect(self.buttons, SIGNAL('clicked()'), self.Screen, SLOT('insert()'))



if __name__ == '__main__':
	App = QApplication(sys.argv)
	#App.setStyle("Mac")
	cal = Cal()
	cal.show()
	App.exec_()
	sys.exit()

اخي الكريم لا أعرف كيف اشكرك، و لكني سعيد جداً اني وجدت المساعدة.

الأن ادرس الكود الذي كتبته جيداً و لكني توقفت عن دالة insert في كلاس Screen فلم افهمها جيداً. ارجو ان تشرح ماهية الدالة sender()

ايضاً نفس المشكلة القديمة و هي عدم استقبال الScreen للأرقام عند الضغط عليها اعتقد المشكلة في insert لأن clear() تعمل بكفاءة

جربت هذا

for i in self.buttons.keys() :
                    self.connect(self.buttons, SIGNAL('clicked()'), self.Screen, SLOT("clear()"))

و عمل بدون اي مشاكل

#5

العفو اخي الكريم

لا شكر على واجب المهم تتابع الموضوع للنهاية

الكود يعمل تماما اتمنى ان تجربه كاملا كما هو

تأكد من تغيير الخط اللي استخدمته انا لما كان عليه عندك "ممكن يكون هو السبب في عدم ظهور الارقام "

قبلا اكتب بعد

buttText = self.sender().text()

LINE[19]

print buttText

------------------------------------------------------------------------------------------------------------------------------------------

تعريف الـ slot في PySide يكون باستخدام الـ

Directive @QtCore.Slot( [ type1[,type2[,...]]] )

[ type1[,type2[,...]]] هي انواع العناص الممررة الى الـ slot ولا احتاج اي ارسال قيم وبالتالي بدون انواع فاستخدمت "void"

slot insert :

        @Slot('void')
        def insert(self):
                buttText = self.sender().text()
                if  (self.sender().text()) in ".0123456789" :
                        """"""
                else:
                        buttText = " "  + buttText +" "
                if self.text() =="0": 
                        self.setText( buttText)
                else:
                        self.setText( self.text() + buttText  )

اما QObject.sender() ] ترجع اخر عنصر ارسل سيجنال للعنصر صاحب الـ slot المرسل اليه

PySide.QtCore.QObject.sender()

Return type: PySide.QtCore.QObject

Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. The pointer is valid only during the execution of the slot that calls this function from this object’s thread context.

The pointer returned by this function becomes invalid if the sender is destroyed, or if the slot is disconnected from the sender’s signal.

يعني لو ضغط زر رقم 3 سيجنال click() تنطلق ترسل الاشارة حسب سطر الـ connect الي العنصر screen

LINE[102]

يخزن في sceen.slot() زر رقم 3 ومنه تحصل على احد خصائصة .text()

LINE[19]

اللي ستضيفه الى محتوى السكرين باستخدام .setText()

LINE[25,27]

Qt Signals & Slots

Signals and Slots in PySide

تم تعديل هذه المشاركة بواسطة ihope في 19 يوليو 2011 في 06:51

1

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#6

غالبا لدي مشكلة في الويندوز حيث تخرج لي رسالة خطأ في Pythonw.exe و لكني جربت علي اللينكس ايضا و نفس المشكلة حيث ان الأرقام لا تظهر علي شاشة الألة

#7

ياريت ترفق صورة للخطء في الويندوز

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#8
ihope كتب:

ياريت ترفق صورة للخطء في الويندوز

هذه صورة الخطأ

post-243049-077915600 1311300644_thumb.j

المرفقات
Untitled-1.jpg
#9

فضلا قم بتشغيله من سطر الأوامر وانسخ رسالة الخطأ منه (بيكون فيها نوع الخطأ ورسالة الخطأ ورقم السطر )

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#10
ahmed_youssef كتب:

فضلا قم بتشغيله من سطر الأوامر وانسخ رسالة الخطأ منه (بيكون فيها نوع الخطأ ورسالة الخطأ ورقم السطر )

لا يوجد اي خطأ يظهر و لكن عند الضغط علي رقم تحدث عملية Freeze للالة و لا يمكن اغلاقها الا عن طريق Task Manager

post-243049-057844500 1311338782_thumb.j

المرفقات
Untitled-2.jpg
#11
اسلام مصطفي كتب:

لا يوجد اي خطأ يظهر و لكن عند الضغط علي رقم تحدث عملية Freeze للالة و لا يمكن اغلاقها الا عن طريق Task Manager

post-243049-057844500 1311338782_thumb.j

غالبا - المشكل مع py 2.7 انا جربت الكود من 2.7 و windows xp حدث نقس المشكل

اما مع 2.5 فلا مشكلة ساحاول معرفة اي جزء المسبب للمشكلة تحياتي

تم تعديل هذه المشاركة بواسطة ihope في 22 يوليو 2011 في 20:12

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#12

تصحيح مع الاعتذار

بدل استخدام

@Slot("void")

استخدم

@Slot()

جرب وان شاء الله يعمل الكود

تحياتي

ihope كتب:

العفو اخي الكريم

لا شكر على واجب المهم تتابع الموضوع للنهاية

الكود يعمل تماما اتمنى ان تجربه كاملا كما هو

تأكد من تغيير الخط اللي استخدمته انا لما كان عليه عندك "ممكن يكون هو السبب في عدم ظهور الارقام "

قبلا اكتب بعد

buttText = self.sender().text()

LINE[19]

print buttText

------------------------------------------------------------------------------------------------------------------------------------------

تعريف الـ slot في PySide يكون باستخدام الـ

Directive @QtCore.Slot( [ type1[,type2[,...]]] )

[ type1[,type2[,...]]] هي انواع العناص الممررة الى الـ slotولا احتاج اي ارسال قيم وبالتالي بدون انواع فاستخدم

@Slot()

slot insert :

        @Slot()
        def insert(self):
                buttText = self.sender().text()
                if  (self.sender().text()) in ".0123456789" :
                        """"""
                else:
                        buttText = " "  + buttText +" "
                if self.text() =="0": 
                        self.setText( buttText)
                else:
                        self.setText( self.text() + buttText  )

اما QObject.sender() ] ترجع اخر عنصر ارسل سيجنال للعنصر صاحب الـ slot المرسل اليه

PySide.QtCore.QObject.sender()

Return type: PySide.QtCore.QObject

Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. The pointer is valid only during the execution of the slot that calls this function from this object’s thread context.

The pointer returned by this function becomes invalid if the sender is destroyed, or if the slot is disconnected from the sender’s signal.

يعني لو ضغط زر رقم 3 سيجنال click() تنطلق ترسل الاشارة حسب سطر الـ connect الي العنصر screen

LINE[102]

يخزن في sceen.slot() زر رقم 3 ومنه تحصل على احد خصائصة .text()

LINE[19]

اللي ستضيفه الى محتوى السكرين باستخدام .setText()

LINE[25,27]

Qt Signals & Slots

Signals and Slots in PySide

تم تعديل هذه المشاركة بواسطة ihope في 25 يوليو 2011 في 04:00

1

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#13
ihope كتب:

تصحيح مع الاعتذار

بدل استخدام

@Slot("void")

استخدم

@Slot()

جرب وان شاء الله يعمل الكود

تحياتي

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

#14
اسلام مصطفي كتب:

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

للأسف متوقف، لا استطيع ان اجد الفكرة او الطريقة التي سيتم بها عمل الحسابات، هل الأرقام المدخلة ستكون في مصفوفة و المعاملات في مصفوفة اخري ام ماذا

لو تعطيني الفكرة و انا انفذ و اكتب الكود تكون مشكوووورا

#16

تقريبا وصلت للحل و لكن هناك مشكلة و هي ان عند الضغط علي "=" تظهر مع الأرقام التي تدخل الدالة السحرية (سحرية لأنها حلت المشكلة) و لا اعلم كيف استثنيها منهم، هذا هو الكود اضفت دالة في الكلاس الأول و جملة في دالة doEvent

import sys
from PySide.QtGui import *
from PySide.QtCore import *

class screen(QLineEdit):
        def __init__(self, parent=None):
                QLineEdit.__init__(self, None)
                self.setMinimumSize(270, 65)
                self.setMaximumSize(290, 75)
                self.setText("0")
                self.setFocus()
                #self.setStyleSheet("border-radius:0px;border-style: groove;border-color: #ccc;border-width:1px;color:#ffffff;background-color:#416f9a;")
                ##Fonts##
                sansFont = QFont('impact', 18)
                sansFont.setStretch(65)


        @Slot()
        def insert(self):
                self.buttText = self.sender().text()
                if  (self.sender().text()) in ".0123456789" :
                        """"""
                else:
                        self.buttText = " "  + self.buttText + " "
                if self.text() == "0": 
                        self.setText(self.buttText)
                else:
                        self.setText(self.text() + self.buttText)

        def result(self):
                onScreen = str(self.text())
                result = eval(onScreen)
                self.setText(result)



class Cal(QWidget):
        buttons = {}
        Layouts ={}
        def __init__(self, parent=None):
                QWidget.__init__(self, None)

                ##Main Window##
                self.setWindowTitle("Simple Calculator")
                self.setMaximumSize(300,370)
                self.setMinimumSize(300,370)
                #self.setStyleSheet("color:#ffffff;")


                ##Layout##
                Grid = QVBoxLayout()
                self.Layouts['screenLayout'] = QHBoxLayout()
                self.Layouts['underScreen'] = QHBoxLayout()
                self.Layouts[0] = QHBoxLayout()
                self.Layouts[1] = QHBoxLayout()
                self.Layouts[2] = QHBoxLayout()
                self.Layouts[3] = QHBoxLayout()
                self.Layouts[4] = QHBoxLayout()

                Grid.addLayout(self.Layouts['screenLayout'])
                Grid.addLayout(self.Layouts['underScreen'])
                Grid.addLayout(self.Layouts[0]) 
                Grid.addLayout(self.Layouts[1]) 
                Grid.addLayout(self.Layouts[2])
                Grid.addLayout(self.Layouts[3])
                Grid.addLayout(self.Layouts[4])

                self.setLayout(Grid)


                ##Screen##
                self.Screen = screen()
                self.Layouts['screenLayout'].addWidget(self.Screen)
                ## do math ##



                ##Layout Under Screen##
                self.historyButton = QPushButton('History')
                self.clearButton = QPushButton('Clr')
                self.Layouts['underScreen'].addWidget(self.historyButton)
                self.Layouts['underScreen'].addWidget(self.clearButton)

                ##Functions to start##
                self.doButton()
                self.doEvent()


        ##Making New Buttons##
        def makeButton(self, buttonName, layoutName):
                button = QPushButton('%s' % buttonName)
                #button.setFlat(1)
                button.setStyleSheet("color:#FFFFFF;background-color:#416f9a;height:40;border-style:groove;border-width:1px;border-color:#ccc;")
                layoutName.addWidget(button)
                return button

        def doButton(self):
                n1 = ['/','!','%','^','7','8','9','*','4','5','6','-','1','2','3','+','.','-/+','0','=']


                for i in range(len(n1)):
                        self.buttons[n1] = self.makeButton(n1, self.Layouts[ (i / 4)])


        ##Events and Connections##
        def doEvent(self):
                self.connect(self.clearButton, SIGNAL('clicked()'), self.Screen, SLOT('clear()'))
                for i in self.buttons.keys() :
                    self.connect(self.buttons, SIGNAL('clicked()'), self.Screen, SLOT('insert()'))
                self.connect(self.buttons['='], SIGNAL('clicked()'), self.Screen, SLOT('result()'))




if __name__ == '__main__':
        App = QApplication(sys.argv)
        App.setStyle('plastique')
        cal = Cal()
        cal.show()
        App.exec_()
        sys.exit()

تم تعديل هذه المشاركة بواسطة اسلام مصطفي في 29 يوليو 2011 في 01:11

#17

انظر التعليقات

        def result(self):
                onScreen = self.text()
                onScreen = onScreen[:len(onScreen)-2]   # onScreen = (something =  )  http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
                result = str(eval(onScreen))  # eval will give a (int)eger value ; needed to be converted to (str)ing to match "setText" requirements
                self.setText(result)

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#18
ihope كتب:

انظر التعليقات

        def result(self):
                onScreen = self.text()
                onScreen = onScreen[:len(onScreen)-2]   # onScreen = (something =  )  http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
                result = str(eval(onScreen))  # eval will give a (int)eger value ; needed to be converted to (str)ing to match "setText" requirements
                self.setText(result)

رائع ! بدونك لكنت تأخرت كثيرا، اتعلم منك الكثيييييييييير، هل تقترح ان ابدأ في عمل برنامج بفكرة مختلفة ام اقوم بتطوير الألة ام تحويلها الي برنامج exe

#19

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

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#20
ihope كتب:

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

نعم يتبقي تصحيح ال "^" و ال "!" و الHistory و ال "-/+". اتمني ان اقوم باكمالها لوحدي ، بدأت اشعر كأني لست علي مستوي لا يسمح لي بأن اكون مبرمج و لكن لن استسلم ان شاء الله، سأعطي لنفسي العديد من الفرص.

#21

post deleted

تم تعديل هذه المشاركة بواسطة اسلام مصطفي في 29 يوليو 2011 في 22:31

#22

.after some editing

now factorial is working very well

is factorial 0 = 0

?

cal.py

sry for that i can't write in arabic

تم تعديل هذه المشاركة بواسطة اسلام مصطفي في 29 يوليو 2011 في 22:29

#23

جميل يا اسلام بس مضروب الـصفر بواحد ممكن تستثنيه بـ if

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#24
ihope كتب:

جميل يا اسلام بس مضروب الـصفر بواحد ممكن تستثنيه بـ if

رائع ! عملتها ، بس باقي ال "." و ال "-\+" لسا محتاجين تعديلات كتيرة.

ايه الخطوة اللي بعد كدا :) ؟

::::::::::::::::::

اضافة :

قمت بتحويل البرنامج ال exe باستخدام py2exe اصبح لدي مجلد dist حجمه 23 ميجا !

تم تعديل هذه المشاركة بواسطة اسلام مصطفي في 30 يوليو 2011 في 03:28

#25
'py2exe': {
            ...
            'includes': ['PySide.QtQore','PySide.QtGui'],
            ...
        }

لو حطيت اي اضافات في py2exeIncludes

غير دول

الاحسن تشيلها علشان الحجم

وجرب تستخدم الـ UPX

(بيضغط ملفات التنفيذية وبتفضل تنفيذية )

هتنزله من الموقع

وتكتب في الكوماند

set UPX=-7 --compress-icons#0

وبعدها

في نفس الفولدر اللي فكيت فيه الـUPX

upx.exe "urfile.exe"

جرب و قولنا

تحياتي

تم تعديل هذه المشاركة بواسطة ihope في 30 يوليو 2011 في 17:33

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…