Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marcohenning/pyqt-phone-input
A clean and modern phone number input widget for PyQt and PySide
https://github.com/marcohenning/pyqt-phone-input
pypi-package pyqt pyqt5 pyqt6 pyside pyside2 pyside6 python python3 qt qt-widget
Last synced: about 18 hours ago
JSON representation
A clean and modern phone number input widget for PyQt and PySide
- Host: GitHub
- URL: https://github.com/marcohenning/pyqt-phone-input
- Owner: marcohenning
- License: mit
- Created: 2024-08-29T21:51:27.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2024-09-09T14:58:53.000Z (5 months ago)
- Last Synced: 2025-02-06T16:47:01.423Z (8 days ago)
- Topics: pypi-package, pyqt, pyqt5, pyqt6, pyside, pyside2, pyside6, python, python3, qt, qt-widget
- Language: Python
- Homepage: https://pypi.org/project/pyqt-phone-input/
- Size: 4.12 MB
- Stars: 5
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PyQt Phone Input
[![PyPI](https://img.shields.io/badge/pypi-v1.0.2-blue)](https://pypi.org/project/pyqt-phone-input)
[![Python](https://img.shields.io/badge/python-3.7+-blue)](https://github.com/marcohenning/pyqt-phone-input)
[![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/marcohenning/pyqt-phone-input/blob/master/LICENSE)
[![Coverage](https://img.shields.io/badge/coverage-90%25-neon)](https://github.com/marcohenning/pyqt-phone-input)
[![Build](https://img.shields.io/badge/build-passing-neon)](https://github.com/marcohenning/pyqt-phone-input)A clean and modern phone number input widget for PyQt and PySide.
![Main](https://github.com/user-attachments/assets/b0d91e9a-a38f-45b9-9886-e1422c298b2c)
## About
The widget features a dropdown to select the country and a text field to input a phone number, both of which are highly customizable. The country dropdown offers exactly the same 235 countries / territories that Google's phone inputs do and displays the selected country's flag as well as its phone code. The flag icons used are modified versions of the icons available on [this repository](https://github.com/lipis/flag-icons).
## Installation
```
pip install pyqt-phone-input
```## Example
```python
from PyQt6.QtWidgets import QMainWindow
from pyqt_phone_input import PhoneInputclass Window(QMainWindow):
def __init__(self):
super().__init__(parent=None)# Phone input
self.phone_input = PhoneInput(self)
self.phone_input.setBorderRadius(5)
self.phone_input.setCountry('us')
self.phone_input.setPlaceholderText('Phone number')
```## Documentation
> **IMPORTANT:**
Styling of the widget must not be done by setting the stylesheet manually as the widget calculates the stylesheet itself and overrides it. Use the provided methods such as `setBackgroundColor()`, `setFocusedBackgroundColor()` and `setDisabledBackgroundColor()` instead.* **Setting the current country:**
```python
phone_input.setCountry('us') # United States
```* **Getting the current country:**
```python
phone_input.getCountry() # 'us'
```* **Getting the current phone code:**
```python
phone_input.getCountryPhoneCode() # '+1'
```* **Getting the phone number:**
```python
# country = 'us', input = '1234567'
phone_input.getPhoneNumber() # '+11234567'
```* **Setting the text color:**
```python
phone_input.setColor(QColor(0, 0, 0))
```* **Setting the background color:**
```python
phone_input.setBackgroundColor(QColor(255, 255, 255))
```* **Setting the border color:**
```python
phone_input.setBorderColor(QColor(0, 0, 0))
```* **Setting the border width:**
```python
phone_input.setBorderWidth(1)
```* **Setting the border radius:**
```python
phone_input.setBorderRadius(5)
```* **Setting the placeholder text:**
```python
phone_input.setPlaceholderText('Phone number')
```**
All methods:**| Method | Description |
|----------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| `getCountry(self)` | Get the country code of the currently selected country |
| `getCountryPhoneCode(self)` | Get the phone code of the currently selected country |
| `setCountry(self, country: str)` | Set the current country (by country code) |
| `getPhoneNumber(self)` | Get the phone number (Returns country code and number from text field without any spaces) |
| `setInput(self, input_number: str)` | Set the text field's input |
| `getPlaceholderText(self)` | Get the text field's current placeholder text |
| `setPlaceholderText(self, text: str)` | Set the text field's current placeholder text |
| `isDisabled(self)` | Get whether the widget is currently disabled |
| `setDisabled(self, disabled: bool)` | Set whether the widget should be disabled |
| `setColor(self, color: QColor)` | Set the regular color of the text |
| `setBackgroundColor(self, color: QColor)` | Set the regular color of the background |
| `setBorderColor(self, color: QColor)` | Set the regular color of the border |
| `setBorderWidth(self, width: int)` | Set the width of the border |
| `setBorderRadius(self, radius: int)` | Set the radius of the border |
| `setPadding(self, padding: QMargins)` | Set the padding of the text field |
| `setFocusedColor(self, color: QColor)` | Set the text color for when the widget is focused |
| `setFocusedBackgroundColor(self, color: QColor)` | Set the background color for when the widget is focused |
| `setFocusedBorderColor(self, color: QColor)` | Set the border color for when the widget is focused |
| `setDisabledColor(self, color: QColor)` | Set the text color for when the widget is disabled |
| `setDisabledBackgroundColor(self, color: QColor)` | Set the background color for when the widget is disabled |
| `setDisabledBorderColor(self, color: QColor)` | Set the border color for when the widget is disabled |
| `setTextSelectionForegroundColor(self, color: QColor)` | Set the foreground color of the text field's selection |
| `setTextSelectionBackgroundColor(self, color: QColor)` | Set the background color of the text field's selection |
| `isDropdownItemHeightDynamic(self)` | Get whether the dropdown item height is dynamic (always the same height as the widget) |
| `setDropdownItemHeightDynamic(self, dynamic: bool)` | Set whether the dropdown item height should be dynamic (always the same height as the widget) |
| `setDropdownItemHeight(self, height: int)` | Set the dropdown item height (will only be used if dynamic height is disabled) |
| `setDropdownItemSelectionForegroundColor(self, color: QColor)` | Set the foreground color of the selected dropdown item |
| `setDropdownItemSelectionBackgroundColor(self, color: QColor)` | Set the background color of the selected dropdown item |
| `setDropdownBorderColor(self, color: QColor)` | Set the border color of the dropdown window |
| `setFont(self, font: QFont)` | Set the font used by text field and phone code of currently selected country |
| `setDropdownFont(self, font: QFont)` | Set the font used for the dropdown items |## Countries
| Country Code | Country / Territory | Phone Code |
|--------------|--------------------------------|------------|
| af | Afghanistan | +93 |
| al | Albania | +355 |
| dz | Algeria | +213 |
| as | American Samoa | +1 |
| ad | Andorra | +376 |
| ao | Angola | +244 |
| ai | Anguilla | +1 |
| ag | Antigua and Barbuda | +1 |
| ar | Argentina | +54 |
| am | Armenia | +374 |
| aw | Aruba | +297 |
| sh-ac | Ascension Island | +247 |
| au | Australia | +61 |
| at | Austria | +43 |
| az | Azerbaijan | +994 |
| bs | Bahamas | +1 |
| bh | Bahrain | +973 |
| bd | Bangladesh | +880 |
| bb | Barbados | +1 |
| by | Belarus | +375 |
| be | Belgium | +32 |
| bz | Belize | +501 |
| bj | Benin | +229 |
| bm | Bermuda | +1 |
| bt | Bhutan | +975 |
| bo | Bolivia | +591 |
| ba | Bosnia and Herzegovina | +387 |
| bw | Botswana | +267 |
| br | Brazil | +55 |
| io | British Indian Ocean Territory | +246 |
| vg | British Virgin Islands | +1 |
| bn | Brunei | +673 |
| bg | Bulgaria | +359 |
| bf | Burkina Faso | +226 |
| bi | Burundi | +257 |
| kh | Cambodia | +855 |
| cm | Cameroon | +237 |
| ca | Canada | +1 |
| cv | Cape Verde | +238 |
| bq | Caribbean Netherlands | +599 |
| ky | Cayman Islands | +1 |
| cf | Central African Republic | +236 |
| td | Chad | +235 |
| cl | Chile | +56 |
| cn | China | +86 |
| co | Colombia | +57 |
| km | Comoros | +269 |
| cg | Congo - Brazzaville | +242 |
| cd | Congo - Kinshasa | +243 |
| ck | Cook Islands | +682 |
| cr | Costa Rica | +506 |
| ci | Côte d'Ivoire | +225 |
| hr | Croatia | +385 |
| cu | Cuba | +53 |
| cw | Curaçao | +599 |
| cy | Cyprus | +357 |
| cz | Czechia | +420 |
| dk | Denmark | +45 |
| dj | Djibouti | +253 |
| dm | Dominica | +1 |
| do | Dominican Republic | +1 |
| ec | Ecuador | +593 |
| eg | Egypt | +20 |
| sv | El Salvador | +503 |
| gq | Equatorial Guinea | +240 |
| er | Eritrea | +291 |
| ee | Estonia | +372 |
| sz | Eswatini | +268 |
| et | Ethiopia | +251 |
| fk | Falkland Islands | +500 |
| fo | Faroe Islands | +298 |
| fj | Fiji | +679 |
| fi | Finland | +358 |
| fr | France | +33 |
| gf | French Guiana | +594 |
| pf | French Polynesia | +689 |
| ga | Gabon | +241 |
| gm | Gambia | +220 |
| ge | Georgia | +995 |
| de | Germany | +49 |
| gh | Ghana | +233 |
| gi | Gibraltar | +350 |
| gr | Greece | +30 |
| gl | Greenland | +299 |
| gd | Grenada | +1 |
| gp | Guadeloupe | +590 |
| gu | Guam | +1 |
| gt | Guatemala | +502 |
| gn | Guinea | +224 |
| gw | Guinea-Bissau | +245 |
| gy | Guyana | +592 |
| ht | Haiti | +509 |
| hn | Honduras | +504 |
| hk | Hong Kong | +852 |
| hu | Hungary | +36 |
| is | Iceland | +354 |
| in | India | +91 |
| id | Indonesia | +62 |
| ir | Iran | +98 |
| iq | Iraq | +964 |
| ie | Ireland | +353 |
| il | Israel | +972 |
| it | Italy | +39 |
| jm | Jamaica | +1 |
| jp | Japan | +81 |
| jo | Jordan | +962 |
| kz | Kazakhstan | +7 |
| ke | Kenya | +254 |
| ki | Kiribati | +686 |
| xk | Kosovo | +383 |
| kw | Kuwait | +965 |
| kg | Kyrgyzstan | +996 |
| la | Laos | +856 |
| lv | Latvia | +371 |
| lb | Lebanon | +961 |
| ls | Lesotho | +266 |
| lr | Liberia | +231 |
| ly | Libya | +218 |
| li | Liechtenstein | +423 |
| lt | Lithuania | +370 |
| lu | Luxembourg | +352 |
| mo | Macao | +853 |
| mg | Madagascar | +261 |
| mw | Malawi | +265 |
| my | Malaysia | +60 |
| mv | Maldives | +960 |
| ml | Mali | +223 |
| mt | Malta | +356 |
| mh | Marshall Islands | +692 |
| mq | Martinique | +596 |
| mr | Mauritania | +222 |
| mu | Mauritius | +230 |
| mx | Mexico | +52 |
| fm | Micronesia | +691 |
| md | Moldova | +373 |
| mc | Monaco | +377 |
| mn | Mongolia | +976 |
| me | Montenegro | +382 |
| ms | Montserrat | +1 |
| ma | Morocco | +212 |
| mz | Mozambique | +258 |
| mm | Myanmar | +95 |
| na | Namibia | +264 |
| nr | Nauru | +674 |
| np | Nepal | +977 |
| nl | Netherlands | +31 |
| nc | New Caledonia | +687 |
| nz | New Zealand | +64 |
| ni | Nicaragua | +505 |
| ne | Niger | +227 |
| ng | Nigeria | +234 |
| nu | Niue | +683 |
| nf | Norfolk Island | +672 |
| kp | North Korea | +850 |
| mk | North Macedonia | +389 |
| mp | Northern Mariana Islands | +1 |
| no | Norway | +47 |
| om | Oman | +968 |
| pk | Pakistan | +92 |
| pw | Palau | +680 |
| ps | Palestine | +970 |
| pa | Panama | +507 |
| pg | Papua New Guinea | +675 |
| py | Paraguay | +595 |
| pe | Peru | +51 |
| ph | Philippines | +63 |
| pl | Poland | +48 |
| pt | Portugal | +351 |
| pr | Puerto Rico | +1 |
| qa | Qatar | +974 |
| re | Réunion | +262 |
| ro | Romania | +40 |
| ru | Russia | +7 |
| rw | Rwanda | +250 |
| ws | Samoa | +685 |
| sm | San Marino | +378 |
| st | São Tomé & Príncipe | +239 |
| sa | Saudi Arabia | +966 |
| sn | Senegal | +221 |
| rs | Serbia | +381 |
| sc | Seychelles | +248 |
| sl | Sierra Leone | +232 |
| sg | Singapore | +65 |
| sx | Sint Maarten | +1 |
| sk | Slovakia | +421 |
| si | Slovenia | +386 |
| sb | Solomon Islands | +677 |
| so | Somalia | +252 |
| za | South Africa | +27 |
| kr | South Korea | +82 |
| ss | South Sudan | +211 |
| es | Spain | +34 |
| lk | Sri Lanka | +94 |
| bl | St. Barthélemy | +590 |
| sh-hl | St. Helena | +290 |
| kn | St. Kitts & Nevis | +1 |
| lc | St. Lucia | +1 |
| mf | St. Martin | +590 |
| pm | St. Pierre & Miquelon | +508 |
| vc | St. Vincent & Grenadines | +1 |
| sd | Sudan | +249 |
| sr | Suriname | +597 |
| se | Sweden | +46 |
| ch | Switzerland | +41 |
| sy | Syria | +963 |
| tw | Taiwan | +886 |
| tj | Tajikistan | +992 |
| tz | Tanzania | +255 |
| th | Thailand | +66 |
| tl | Timor-Leste | +670 |
| tg | Togo | +228 |
| tk | Tokelau | +690 |
| to | Tonga | +676 |
| tt | Trinidad & Tobago | +1 |
| tn | Tunisia | +216 |
| tr | Türkiye | +90 |
| tm | Turkmenistan | +993 |
| tc | Turks & Caicos Islands | +1 |
| tv | Tuvalu | +688 |
| vi | U.S. Virgin Islands | +1 |
| ug | Uganda | +256 |
| ua | Ukraine | +380 |
| ae | United Arab Emirates | +971 |
| gb | United Kingdom | +44 |
| us | United States | +1 |
| uy | Uruguay | +598 |
| uz | Uzbekistan | +998 |
| vu | Vanuatu | +678 |
| va | Vatican City | +39 |
| ve | Venezuela | +58 |
| vn | Vietnam | +84 |
| wf | Wallis & Futuna | +681 |
| ye | Yemen | +967 |
| zm | Zambia | +260 |
| zw | Zimbabwe | +263 |## License
This software is licensed under the [MIT license](https://github.com/marcohenning/pyqt-phone-input/blob/master/LICENSE).