In: Computer Science
Create an application using PyQt. The user must be prompted for
the name of a country
(e.g. Spain) and a single character (e.g ‘a’). The application must
read the name of the
country and count the number of occurrences of the character in the
country name. The
count should be case-insensitive. Thus, if ‘c’ is entered as the
character then both capital
letter ‘C’ and small letter ‘c’ in the string should be counted.
The count must be displayed.
The application interface must include at least a label, an edit
and a button. You are
welcome to enhance your application with comments and messages.
solution:
given data:
Create an application using PyQt:
Code:
import sys
from PyQt5.QtWidgets import * # PyQt GUI widgets toolkit package
class Application(QWidget): # class inherits from QWidget as it is base class for all user interface objects
def __init__(self): # constructor method
super().__init__() # calls Qwidget constructor
self.createApp() # calls the defined method createApp()
def createApp(self):
self.country_label = QLabel("Enter name of the country: ")
self.country_input = QLineEdit() # input text for Country name
self.letter_label = QLabel("Enter letter to be found in the country: ")
self.letter_input = QLineEdit() # input text for letter
self.button = QPushButton("Check")
self.count_label = QLabel("") # label to display letter count
self.button.clicked.connect(
self.countLetter) # function countLetter() to be called on clicking button so passed to connect()
h1 = QHBoxLayout() # 1st horizontal layout to add Country
h1.addWidget(self.country_label) #
h1.addWidget(self.country_input)
h2 = QHBoxLayout() # 2nd horizontal layout to add Letter
h2.addWidget(self.letter_label)
h2.addWidget(self.letter_input)
v = QVBoxLayout() # vertical layout to add widgets vertically
v.addLayout(h1) # 1st horizontal layout added
v.addLayout(h2) # 2st horizontal layout added
v.addWidget(self.button) # button added vertically
v.addWidget(self.count_label) # Letter count label added vertically
self.setLayout(v) # Overall application layout set to vertical
self.setWindowTitle("Character Count") # Application title set
self.show() # show() method displays the widget on the screen
def countLetter(self): # method to count occurrences
country_inputed = self.country_input.text() # takes the text from country input text
letter_inputed = self.letter_input.text() # takes the text from letter input text
count_letter = 0 # set initial count of letter count to 0
for letter in country_inputed: # logic to get count
if letter.upper() == letter_inputed.upper(): # for case-insensitivity converts both to be compared to uppercase
count_letter = count_letter + 1 # increement count
our_string = "Occurrences of '" + letter_inputed + "' in country " + country_inputed + ":" + str(
count_letter) # output to be display
self.count_label.setText(our_string) # set text to the declared label for displaying count
if __name__ == '__main__':
app = QApplication(sys.argv) # application object of PyQt5 application
window = Application() # calls Application() constructor
sys.exit(app.exec_()) # environment will be informed application ended
Output:


Note:
1]QWidget widget is the base class of all user interface objects in PyQt5. We provide the default constructor for QWidget. The default constructor has no parent. A widget with no parent is called a window.
2]Every PyQt5 application must create an application object. The sys.argv parameter is a list of arguments from a command line. Python scripts can be run from the shell. It is a way how we can control the startup of our scripts.
3]The exec_() method has an underscore. It is because the exec is a Python keyword. And thus, exec_() was used instead.
please give me thumb up