Tìm ở đây kiến thức IT


1. Môi trường ảo là gì?

Môi trường ảo (thuật ngữ chuyên ngành là Virtual Environment). Cũng giống như một máy ảo (Virtual Machine) hoạt động, nó cung cấp và cho phép thiết lập một môi trường ảo, khi đó bạn có thể cài đặt các thư viện khác nhau của Python, thậm chí là phiên bản Python khác mà không làm ảnh hưởng đến Python và các thư viện đã cài trước đó. Điều này tránh xung đột giữa các dự án và giúp bạn kiểm soát chặ chẽ một trường làm việc của mình.
Bạn cũng không thể làm việc với một dự án, có thể một tuần bạn làm “dạo chơi” với vài dự án Python khác nhau, tính chất của các dự án là khác nhau. Ví dụ, đầu tuần bạn làm dự án web về thư viện Django với phiên bản Python 3.8, nhưng đến cuối tuần, bạn tất bận với việc xử lý dữ liệu với team sử dụng Python phiên bản 3.12 chẳng hạn. Mỗi dự án như vậy lại dùng các thư viện khác nhau có thể khác nhau cả về tên thư viện và khác nhau vả về số hiệu phiên bản của cùng một thư viện.

2. Cách xây dựng một môi trường ảo Python

Python cung cấp hai công cụ chính để tạo môi trường ảo là venv (đã được tích hợp từ Python 3.3) và thư viện virtualenv.

2.1. Sử dụng venv để tạo môi trường ảo Python

Bước 1: Đầu tiên, bạn cần tạo mới một thư mục trên máy tính của bạn, sau đó di chuyển Windows Terminal đến thư mục này. Ví dụ:

Di chuyển Windows Terminal đến thư mục cá nhân

Di chuyển Windows Terminal đến thư mục cá nhân

Bước 2: Sau đó, trên Windows Terminal, ta nhập lệnh sau để khởi tạo một môi trường ảo:

python -m venv myenv

Trong đó, myenv là tên môi trường ảo và cũng là tên thư mục con chứa các tệp tin cần thiết cho môi trường ảo.

Tạo môi trường ảo bằng venv trong Python

Tạo môi trường ảo bằng venv trong Python

Bước 3: Tiếp theo, ta cần phải kích hoạt một trường ảo hoạt động bằng cách gọi thực thi tệp activate trong thư mục con Scripts của thư mục myenv:

myenv\Scripts\activate

Sau khi kích hoạt thành công môi trường ảo, bạn sẽ thấy tên môi trường ảo xuất hiện ở đầu dòng nhắc lệnh trên Windows Terminal, ví dụ như sau:

Kích hoạt môi trường ảo với venv

Kích hoạt môi trường ảo với venv

Bước 4: Đến đây thì bạn có thể cài đặt các thư viện Python mà không sợ ảnh hưởng đến máy thật của các bạn. Ví dụ ta cài thư viện numpy, pandas và thư viện matplotlib để phục vụ cho việc phân tích dữ liệu chẳng hạn:

pip install numpy pandas matplotlib
Cài đặt các thư viện Python mong muốn

Cài đặt các thư viện Python mong muốn

Bước 5: Cuối cùng, để thoát khỏi môi trường ảo, bạn chỉ cần nhập lệnh sau:

deactivate


Đóng môi trường ảo với venv

Đóng môi trường ảo với venv

2.2. Tạo môi trường ảo Python bằng thư viện virtualenv

Trước hết, ta cần kiểm tra xem máy tính của bạn đã cài đặt thư viện virtualenv của Python hay chưa. Nếu chưa hãy chạy lệnh sau để cài virtualenv:

pip install virtualenv

Tiếp đến, ta cũng sẽ tạo một thư mục chứa dự án của bạn rồi di chuyển Windows Terminal vào bên trong thư mục đó (giống bước 1 của mục 2.1).
Để tạo môi trường ảo, ta nhập lệnh sau, tương đương với bước 2 của mục 2.1:

virtualenv myenv

Để kích hoạt môi trường ảo với virtualenv, ta nhập lệnh sau, tương đương với bước 3 của mục 2.1:

myenv\Scripts\activate

Để huỷ kích hoạt, ta cũng dùng lệnh deactivate như ở bước 5 của mục 2.1.

2.3. Đối với hệ điều hành MacOs?

Khi này, bạn cần chỉ rõ số hiệu Python bạn sử dụng, đó là python3 chứ không phải là python như ở Windows nữa.
Bạn dùng lệnh python3 -m venv myenv để tạo môi trường ảo.
Còn khi muốn kích hoạt thì bạn nhập lệnh source myenv/bin/activate
Khá giống so với bên Windows phải không ạ. Cảm ơn các bạn đã đọc hướng dẫn. Chúc các bạn tạo môi trường ảo thành công.


1. Nhập dữ liệu vào cho bài toán

Để lấy dữ liệu đầu vào từ người dùng trong Java, lớp Scanner được sử dụng. Lớp Scanner là một lớp tích hợp của gói java.util.
Lớp Scanner cung cấp nhiều phương thức để nhận vào các loại dữ liệu khác nhau từ người dùng.

2. Sử dụng lớp Scanner để nhập dữ liệu đầu vào như nào?

Bước 1: Khai báo thư viện
Đầu tiên, ta cần khai báo lớp Scanner để sử dụng các phương thức có trong lớp này. Để khai báo lớp Scanner, hãy sử dụng câu lệnh sau:

import java.util.Scanner;

Bước 2: Tạo đối tượng của lớp Scanner
Khi này, bạn cần tạo một đối tượng như là một thể hiện từ lớp Scanner để sử dụng các phương thức của lớp này. Để tạo đối tượng của lớp Scanner, hãy gọi hàm tạo Scanner(). Quan sát vào lệnh dưới đây:

Scanner sc = new Scanner(System.in);

Bước 3: Nhập dữ liệu
Lớp Scanner cung cấp nhiều phương thức hữu ích để lấy dữ liệu vào từ người dùng với nhiều kiểu dữ liệu khác nhau. Ví dụ, nếu bạn muốn nhập một giá trị số nguyên, bạn sử dụng phương thức nextInt(). Quan sát lệnh sau:

int so_luong = sc.nextInt();

Với câu lệnh trên, chương trình sẽ chờ người dùng nhập vào một số nguyên. Sau khi nhập vào một số nguyên từ bàn phím, giá trị đó sẽ được gán vào cho biến so_luong.

3. Ví dụ về nhập dữ liệu vào từ bàn phím trong Java

Trong ví dụ sau, ta sẽ nhập vào hai số nguyên từ bàn phím. Tính tổng hai số nguyên này và hiển thị kết quả ra màn hình.

package bai_7_nha_xuat.tinh_tong_hai_so_nguyen;

import java.util.Scanner;

/**
 *
 * @author hvtuan
 */
public class Tong_hai_so {
    public static void main(String[] args) {
        // tạo đối tượng nhập
        Scanner sc = new Scanner(System.in);
        
        // Nhập vào số thứ nhất
        System.out.print("Nhap vao so nguyen thu nhat: ");
        int a = sc.nextInt();
        
        // Nhập vào số thứ hai
        System.out.print("Nhap vao so nguyen thu hai: ");
        int b = sc.nextInt();
        
        // Tính tổng
        int c = a + b;
        
        // hiển thị kết quả
        System.out.println("Tong cua hai so vua nhap la: " + c);
    }
}

Kết quả chương trình trên là:

Tính tổng hai số nguyên

Tính tổng hai số nguyên

4. Các phương thức cho các kiểu nhập dữ liệu đầu vào

Lớp Scanner cung cấp những phương thức khác nhau phục vụ cho việc nhập các kiểu dữ liệu khác nhau từ người dùng. Dưới đây là bảng liệt kê các phương thức hỗ trợ nhập dữ liệu:

Số thứ tự Mô tả
1 String next()
Nhập vào một chuỗi/xâu ký tự.
2 BigDecimal nextBigDecimal()
Nhập vào một số BigDecimal.
3 BigInteger nextBigInteger()
Nhập vào một số BigInteger.
4 boolean nextBoolean()
Nhập vào giá trị Boolean
5 byte nextByte()
Nhập vào một số byte.
6 double nextDouble()
Nhập vào một số double.
7 float nextFloat()
Nhập vào một số float.
8 int nextInt()
Nhập vào một số int.
9 String nextLine()
Nhập vào xâu ký tự.
10 long nextLong()
Nhập vào một số long.
11 short nextShort()
Nhập vào một số short.

Lưu ý: Cần phân biệt cách sử dụng của phương thức next() và phương thức nextLine().


1. Chuyển đổi kiểu dữ liệu là gì?

Chuyển đổi kiểu dữ liệu (hay ép kiểu) là một kỹ thuật lập trình được trình biên dịch hoặc lập trình viên sử dụng để chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác trong Java. Ví dụ, chuyển đổi từ kiểu dữ liệu int sang kiểu double, chuyển từ kiểu short sang kiểu int.
Có hai loại chuyển đổi kiểu trong lập trình Java:

  • Ép kiểu mở rộng (tự động).
  • Ép kiểu thu hẹp (thủ công).

2. Ép kiểu mở rộng

Ép kiểu mở rộng hay còn gọi là ép kiểu ngầm định trong đó kiểu có kích thước nhỏ hơn được chuyển đổi thành kiểu có kích thước lớn hơn, được trình biên dịch thực hiện một cách tự động.
Sơ đồ thực hiện ép kiểu mở rộng như sau:

byte > short > char > int > long > float > double

Với ép kiểu mở rộng thì lập trình viên không thực hiện ép kiểu mà thay vào đó, trình biên dịch là vai trò tác nhân trong việc ép kiểu. Thời kiểu trình biên dịch ép kiểu là tại lúc biên dịch.
Ví dụ:

package mo_rong;

public class MoRong {
	public static void main(String[] args) {
		// khai bao bien
		int a = 5;
		double b = 10.2;
		
		// tinh tong
		double c = a + b;
		
		// hien thi
		System.out.println("Tong c la: " + c);
	}
}

3. Ép kiểu thu hẹp

Ép kiểu thu hẹp hay còn được gọi là ép kiểu rõ ràng, tức là ta cần phải xác định một cách tường mình, rõ ràng kiểu dữ liệu đích mà cần ép kiểu sang. Với ép kiểu thu hẹp thì cần lập trình viên thực hiện thủ công. Ta có thể ép từ kiểu lớn hơn sang kiểu nhỏ hơn. Ví dụ:

double doubleNum = (double) num;

Khi thực hiện ép kiểu thu hẹp thì ta cần phải đặt kiểu dữ liệu đích trong dấu ngoặc đơn () trước giá trị ép kiểu.
Ví dụ:

package thu_hep;
public class ThuHep {
	public static void main(String[] args) {
		// khai bao bien
		int a = 5;
		double b = 10.5;
		
		// chuyen tu kieu int sang double
		double d_num = (double)a;
		
		// chuyen tu kieu double sang int
		int d_int = (int)b;
		
		// hien thi
		System.out.println("Gia tri sau khi ep mo rong la: " + d_num);
		System.out.println("Gia tri sau khi ep thu hep la: " + d_int);
	}
}


1. Biến là gì?

Biến (variable) là tên của một ô nhớ trên bộ nhớ trong của máy tính, có mục đích để lưu trữ dữ liệu. Mỗi biến trong Java có một kiểu dữ liệu cụ thể, kích thước và địa chỉ cụ thể trên bộ nhớ trong.

Biến là gì?

Biến là gì

2. Khai báo và khởi tạo biến

Các bạn bắt buộc phải khai báo biến trước khi sử dụng chúng. Biến trong Java được khai báo bằng cách chỉ định kiểu dữ liệu và theo sau là tên biến. Để gán một giá trị, ta sử dụng toán tử “=” đặt ở giữa tên biến và giá trị. Kết thúc lệnh khai báo hoặc khởi tạo thì ta phải kết thúc bằng dấu chấm phẩy.

2.1. Cú pháp

Cú pháp dưới đây minh hoạ khai báo một biến:

data_type variable [ = value][, variable [ = value] …] ;

Ở đây, kiểu dữ liệu (data_type) là một trong các kiểu dữ liệu của Java và variable là tên biến. Để khai báo nhiều hơn một biến của kiểu dữ liệu đã xác định, bạn sử dụng dạng sanh sách liệt kê các biến bằng dấu phẩy.

2.2. Ví dụ về khai báo và khởi tạo biến hợp lệ

Dưới đây là các ví dụ về khai báo biến, khởi tạo biến trong Java:

int a, b, c; // Khai báo 3 biến kiểu nguyên a, b và c
int a1 = 10, b1 = 10; // khai báo biến và khởi tạo giá trị ban đầu
byte B = 22; // khởi tạo giá trị cho biến kiểu byte
double PI = 3.1416; // khai báo và khởi tạo biến PI kiểu thực
char ch = 'a'; // khai báo và khởi tạo biến kiểu char

3. Kiểu dữ liệu trong Java

Kiểu dữ liệu Java xác định kiểu và phạm vi (miền giá trị) của giá trị dữ liệu mà biến đó có thể lưu trữ được. Việc chỉ rõ kiểu dữ liệu cho biến là rất quan trong, nó cho phép trình biên dịch các định dữ liệu sẽ được lưu trữ và bộ nhớ phân phối cần thiết.
Các kiểu dữ liệu của Java được phân chia thành hai loại chính:

  • Kiểu dữ liệu nguyên thuỷ
  • Kiểu dữ liệu đối tượng (sẽ được học sau trong bai Lớp – Đối tượng)

Có 8 kiểu dữ liệu nguyên thuỷ trong Java:

Kiểu dữ liệu Kích thước Mô tả
byte 1 byte Phạm vi lưu trữ từ -128 to 127
short 2 bytes Phạm vi lưu trữ từ -32,768 to 32,767
int 4 bytes Phạm vi lưu trữ từ -2,147,483,648 to 2,147,483,647
long 8 bytes Phạm vi lưu trữ từ -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float 4 bytes Lưu trữ số thập phân. Lưu trữ 6 đến 7 chũ số sau phần thập phân
double 8 bytes Lưu trữ số thập phân. Lưu trữ 15 đến 16 chũ số sau phần thập phân
boolean 1 bit Lưu trữ một trong hai giá trị true hoặc false
char 2 bytes Lưu trữ ký tự của bảng mã ASCII



Trong bài viết này, mình sẽ hướng dẫn các bạn tạo, chạy một dự án đơn giản bằng IntelliJ, nhằm hiển thị lên màn hình dòng chữ “Hello World!”.

Tạo một dự án Java mới

Trong IntelliJ IDEA, một dự án giúp bạn sắp xếp mã nguồn, kiểm thử, thư viện bạn sử dụng, hướng dẫn xây dựng và cài đặt cá nhân của bạn trong một đơn vị duy nhất.
1. Khởi chạy IntelliJ IDEA.
2. Đợi màn hình Welcome mở ra, hãy nhấp vào Dự án mới.
3. Trong trình hướng dẫn Dự án mới, chọn Java từ danh sách bên trái.
4. Đặt tên cho dự án (ví dụ HelloWorld) và thay đổi vị trí mặc định nếu cần.
5. Chúng ta sẽ không làm việc với các hệ thống kiểm soát phiên bản trong hướng dẫn này, vì vậy hãy tắt tùy chọn Tạo kho lưu trữ Git .
6. Đảm bảo rằng IntelliJ được chọn trong Build system .

Tạo dự án Java mới bằng IntelliJ

Tạo dự án Java mới bằng IntelliJ

7. Để phát triển các ứng dụng Java trong IntelliJ IDEA, bạn cần có Java SDK (JDK).
Nếu JDK cần thiết đã được định nghĩa trong IntelliJ IDEA, hãy chọn JDK đó từ danh sách JDK .
Nếu JDK được cài đặt trên máy tính của bạn nhưng chưa được xác định trong IDE, hãy chọn Thêm JDK và chỉ định đường dẫn đến thư mục gốc của JDK.
8. Để tùy chọn Add sample code ở trạng thái vô hiệu hóa vì chúng ta sẽ thực hiện mọi thứ từ đầu trong hướng dẫn này. Nhấp vào Create.
Sau đó, IDE sẽ tạo và tải dự án mới cho bạn.

Tạo Package và tạo Class

Các Package được sử dụng để nhóm các lớp thuộc cùng một danh mục hoặc cung cấp chức năng tương tự cũng như để cấu trúc và tổ chức các ứng dụng lớn với hàng trăm lớp.
1. Trong cửa sổ công cụ Project, nhấp chuột phải vào thư mục src, chọn New, chọn Package. Sau đó bạn nhập tên Package. Ví dụ “timoday.hellworld”
2. Tiếp theo, bạn chuột phải vào Package vừa tạo, chọn New, chọn Java Class. Sau đó bạn nhập tên Class. Ví dụ “HelloWorld”.
Cùng với tệp Java, IntelliJ IDEA đã tự động tạo một số nội dung cho lớp của bạn. Trong trường hợp này, IDE đã chèn câu lệnh gói và khai báo lớp.

Lập trình chương trình “Hello World” bằng Java

Sau khi bạn tạo Package và tạo Java Class thì ta tiến hành nhập mã lệnh Java nhằm hiển thị dòng chữ “Hello World” lên màn hình kết quả. Bạn tham khảo chương trình sau đây:

package timoday.helloworld;

public class HelloWorld {
    // ham main
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Trên thanh công cụ, bạn chọn nút Run để tiến hành chạy chương trình. Quan sát kết quả chương trình:

Kết quả chương trình Hello World

Kết quả chương trình Hello World

Giới thiệu về IntelliJ

IntelliJ là một IDE thông minh và mạnh mẽ. Nó là môi trường phát triển cho rất nhiều ngôn ngữ nhưng được sử dụng phổ biết nhất với Java.
IntelliJ có hai phiên bản phần mềm: trả phí và miễn phí.

  • IntelliJ Community – Đây là phiên bản miễn phí. Phù hợp với những người mới bắt đầu, học sinh, sinh viên, dự án đơn giản, không phức tạp.
  • IntelliJ Ultimate – Đây là phiên bản mất phí, hỗ trợ một cách tốt nhất cho lập trình viên Java (trong bài viết hướng dẫn học lập trình Java và cả video trên youtube, mình sẽ sử dụng IntelliJ như IDE chính của mình. Tất nhiên mình có tài khoản, không dùng crack).

Các bạn cân nhắc lựa chọn phiên bản trả phí hay tính phí. Các bạn cũng có thể trải nghiệm Eclipse hoặc BlueJ. Đây là hai phần mềm mình cũng đã từng sử dụng, tuỳ vào mục đích sử dụng nên mình thấy không có quá nhiều bất tiện.

Tải IntelliJ

Các bạn vào trang chủ của Intellij để download IntelliJ. Hệ thống tự nhận biết hệ điều hành đang dùng. Mình đang dùng Windows 11 nên trang web tự điều hướng cho mình tải phiên bản dành cho Windows.
Tại đây các bạn lựa chọn một trong hai phiên bản Community (miễn phí) hoặc Ultimate (trả phí) để tải bộ cài về. Dung lượng file cài khoảng 1GB nên các bạn đợi nó tả về hoàn tất nhé.

Tải IntelliJ

Tải IntelliJ

Hướng dẫn cài đặt IntelliJ

Bước 1: Bạn chuột phải vào file cài chon Run as Administrator

Chạy bộ cài IntelliJ

Chạy bộ cài IntelliJ

Bước 2: Nhấn Next để bắt đầu
Nhấn Next để tiếp tục

Nhấn Next để tiếp tục

Bước 3: Chọn nơi lưu trữ muốn cài đặt phần mềm vào máy tính. Thông thường bước này ta để mặt định
Chọn nơi lưu trữ cài đặt phần mềm

Chọn nơi lưu trữ cài đặt phần mềm

Bước 4: Lựa chọn tuỳ chọn mở rộng liên quan đến hệ thống. Với mình thì mình sẽ chọn hết
Lựa chọn tuỳ chọn khi cài đặt phần mềm

Lựa chọn tuỳ chọn khi cài đặt phần mềm

Bước 5: Nhấn Install để cài đặt phần mềm
Nhấn Install để cài đặt phần mềm

Nhấn Install để cài đặt phần mềm

Bước 6: Chờ đợi cho quá trình cài đặt phần mềm hoàn tất
Đang cài đặt phần mềm

Đang cài đặt phần mềm

Bước 7: Đến đây hệ thống sẽ hỏi bạn có muốn khởi động lại máy tính ngay hay không. Mình chọn khởi động lại máy ngay bây giờ. Vậy là các bạn đã cài đặt xong phần mềm IDE lập trình phổ biến cho Java là IntelliJ rồi.
Khởi động lại máy để hoàn tất quá trình cài đặt

Khởi động lại máy để hoàn tất quá trình cài đặt

Chúc bạn thành công!

Khi lập trình với ngôn ngữ lập trình Java, ta không thể thiếu JDK và IDE hỗ trợ lập trình. Vậy JDK là gì và ta lựa chọn IDE nào phù hợp để lập trình Java một cách tốt nhất.

JDK là gì?

JDK là viết tắt của từ Java Development Kit. JDK là một bộ phần mềm cung cấp môi trường lập trình khi sử dụng ngôn ngữ lập trình Java. JDK bao gồm Java Runtime Environment giúp người lập trình chạy thử để kiểm tra ứng dụng trong quá trình phát triển phần mềm.

Hướng dẫn cài đặt JDK cho hệ điều hành Windows 11

Bước 1: Tải và cài đặt JDK

Đầu tiên, ta truy cập trang web Oracle Java Development Kit (JDK)

Chon lựa phiên bản JDK

Chon lựa phiên bản JDK

Tại đây, tuỳ vào mục đích sử dụng mà ta lựa chọn phiên bản của JDK sao cho phù hợp. Với tôi, tôi sẽ cài đặt JDK 21 Long-Term Support (LTS). Nếu bạn lựa chọn giống tôi, hãy chọn đúng phiên bản theo hình minh hoạ bên trên.
Sau khi quá trình tải JDK 21 hoàn tất, bạn hãy nhấn phải chuột ⇒ Run as administrator và tiến hành cài đặt như một phần mềm thông thường.

Bước 2: Cấu hình biến môi trường

Sau khi cài đặt JDK thành công, ta cần phải cấu hình biến môi trường để thông báo cho hệ điều hành biết về thư mục chứa bộ cài JDK đã cài và sử dụng. Đầu tiên, ta copy đường dẫn đến thư mục bin của thư mục JDK đã cài trên máy tính:

Copy đường dẫn đến thư mục bin

Copy đường dẫn đến thư mục bin

Với hệ điều hành Windows 11, ta thực hiện chức năng tìm kiếm với từ khoá Edit enviroment và chọn vào mục Edit the system enviroment variables

Tìm kiếm System Properties

Tìm kiếm System Properties

Tại đây, ta chọn Enviroment variables

Chọn Enviroment Varibles

Chọn Enviroment Varibles

Tiếp đến, ta tạo biến môi trường JAVA_HOME như sau:

Tạo biến môi trường JAVA_HOME

Tạo biến môi trường JAVA_HOME

Cuối cùng trong bước này, ta thiết lập đường dẫn Path như sau:

Khai báo biến môi trường vào Path

Khai báo biến môi trường vào Path

Ta lưu mọi thiết lập lại và mở CMD – Command Prompt và nhập lệnh javac. Nếu mọi thứ đều thành công thì bạn nhận được thông báo như sau:

Lệnh javac trong của sổ CMD

Lệnh javac trong của sổ CMD

Bạn có thể tham khảo video hướng dẫn cài JDK mới nhất.

1. Java là gì?

Java là một ngôn ngữ lập trình bậc cao, nó mạnh mẽ, có hỗ trợ lập trình hướng đối tượng.
Java được phát triển bởi Sun Microsystems (hiện tại là công ty con của Oracle) vào năm 1995. James Gosling là tác giả của ngôn ngữ lập trình Java. Trước khi có tên Java thì nó đã có tên là Oak. Vì Oak đã được đăng ký cho tên của một công ty khác nên James Gosling và nhóm cộng sự đã quyết định đổi tên từ Oak thành Java.
Đã có hơn 3 triệu thiết bị chạy Java. Java được dùng cho mục đích:

  • Ứng dụng di động (trên hệ điều hành Android).
  • Ứng dụng máy tính (Desktop).
  • Ứng dụng web.
  • Máy chủ web.
  • Games.
  • Kết nối cơ sở dữ liệu.

2. Tại sao lại sử dụng Java

  • Java làm việc và hoạt động trên nhiều nền tảng khác nhau như Windows, MacOs, Linux, Raspberry Pi, …
  • Java là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới.
  • Nhu cầu tuyển dụng các vị trí lập trình viên Java đa dạng.
  • Java là mã nguồn mở và miễn phí.
  • Nó an toàn, nhanh chóng và mạnh mẽ.
  • Java có cộng đồng hỗ trợ lớn, tài nguyên tìm hiểu và học tập mạnh mẽ.
  • Java là ngôn ngữ lập trình hướng đối tượng và nó cung cấp cấu trúc rõ ràng cho các chương trình tái sử dụng lại mã, giúp giảm thiểu chi phí cho nhà phát triển.
  • Java có cú pháp gần giống với C/C++ và C# nên các lập trình có thể chuyển đổi dễ dàng với nhau.

3. Các loại ứng dụng Java

Dưới đây là 4 loại chính ứng dụng mà Java có thể tạo ra:

3.1. Standalone Application

Điển hình chính là các chương trình phần mềm chạy trên Desktop. Đây là phần mềm truyền thống mà chúng ta cài đặt để sử dụng hằng ngày. Ví dụ như phần mềm đa phương tiện (nghe nhạc, xem video trên máy tính), phần mềm diệt virus, … Thư viện AWTSwing được sử dụng trong Java để tạo nên loại ứng dụng này.

3.2. Web Application

Một ứng dụng chạy trên phía máy chủ và tạo ra một trang web động được gọi là ứng dụng web. Hiện nay các công nghệ Servlet, JSP, Spring, Hibernate, … được sử dụng để tạo nên các ứng dụng web bằng ngôn ngữ Java.

3.3. Enterprise Application

Một số các ứng dụng có tính phân phối mang tính thượng mại, chẳng hạn như các ứng dụng ngân hàng, … được gọi là ứng dụng cho doanh nghiệp. Nó có những ưu điểm như độ bảo mật cao, cân bằng tải, phân tán. Trong Java, EJB được sử dụng để tạo ra các ứng dụng doanh nghiệp.

3.4. Mobile Application

Một số ứng dụng được tạo ra nhằm hoạt động được trên các thiết bị di động.

4. Nền tảng lập trình Java

Có 4 loại nền tảng hoặc phiên bản của Java:

4.1. Java SE (Java Standard Edition)

Đây là một nền tảng lập trình Java. Nó bao gồm các API Java như java.lang, java.io, java.net, java.util, java.sql, java.math, … Bao gồm lập trình cho OOP, String, Regex, Exception, Đa luồng, mạng, Swing, Collection, …

4.2. Java EE (Java Enterprise Edition)

Đây là một nền tảng cho doanh nghiệp, chủ yếu được sử dụng để phát triển các ứng dụng web và ứng dụng. Nó được xây dựng trên nền tảng Java SE. Nó bao gồm các chủ đề như Servlet, JSP, JPA, …

4.3. Java ME (Java Micro Edition)

Đây là một nền tảng nhỏ riêng cho các ứng dụng di động.

4.4. JavaFX

Được sử dụng để phát triển các ứng dụng phong phú. Nó sử dụng API thiết kế giao diện người dùng.



Trong bài viết này, chúng ta sẽ được tìm hiểu cách sử dụng lớp QLineEdit để tạo ra một ô dữ liệu cho phép người dùng nhập liệu từ bàn phím.

Giới thiệu về QLineEdit

Trong PyQt, thành phần QLineEdit cho phép bạn tạo ra một ô để cho phép người dùng nhập dữ liệu. Tiêu biểu, các giao diện mở đầu của một phần mềm có sử dụng QLineEdit để nhập thông tin vào để kiểm tra.
Bạn thường sử dụng QLineEdit cùng với QLabel. Để tạo một QLineEdit, ta thực hiện theo các bước sau:
Đầu tiên, ta thêm lớp QLineEdit từ thư viện PyQt6.QtWidgets:

from PyQt6.QtWidgets import QLineEdit

Thứ hai, tạo một đối tượng là thể hiện của lớp QLineEdit, nó được cung cấp hai phương thức khởi tạo mà ta có thể tạo đối tượng từ lớp QLineEdit:

  • QLineEdit(parent: QWidget = None): Khởi tạo một ô nhập liệu trống.
  • QLineEdit(text: str, parent: QWidget = None): Khởi tạo một ô nhập liệu với một giá trị chuỗi mặc định

Ví dụ:

line_edit = QLineEdit('Default Value', self)

Bên cạnh đó, bạn cũng có thể sử dụng thêm những thuộc tính tuỳ chọn khác:

Thuộc tính Kiểu dữ liệu Mô tả
text string Nội dung của ô nhập liệu
readOnly Boolean True hoặc False. Nếu True thì ô nhập liệu không thể chỉnh sửa
clearButtonEnabled Boolean True để thêm nút ấn xoá nội dung
placeholderText string Văn bản được hiển thị khi ô nhập liệu chưa được nhập dữ liệu
maxLength integer Đặc tả kích thước tối đa số lượng các ký tự mà có thể nhập liệu
echoMode QLineEdit.EchoMode Thay đổi cách hiển thị cũng như hiển thị. Ví dụ, password thì sẽ không nhìn thấy dữ liệu

Ví dụ về cách sử dụng QLineEdit

Ví dụ đơn giản về QLineEdit

Quan sát vào chương trình mẫu dưới đây để thấy được cách tạo ra một QLineEdit:

import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QLineEdit, QVBoxLayout)

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # thuộc tính cơ bản của cửa sổ hiển thị
        self.setWindowTitle('Ví dụ đơn giản về QLineEdit')
        self.setGeometry(100, 100, 320, 210)

        # tạo một QLineEdit
        search_box = QLineEdit(self, placeholderText='Enter a keyword to search...', clearButtonEnabled=True)

        # xác định vị trí của các thành phần
        layout = QVBoxLayout()
        layout.addWidget(search_box)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Kết quả của chương trình trên như sau:

Ví dụ đơn giản về QLineEdit

Ví dụ đơn giản về QLineEdit

Ví dụ về QLineEdit để tạo ô nhập liệu chứa mật khẩu

Quan sát chương trình mẫu sau để biết cách tạo một ô nhập liệu mật khẩu:

import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QLineEdit, QVBoxLayout)

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # thông tin cơ bản cửa sổ
        self.setWindowTitle('Ví dụ nhập mật khẩu bằng QLineEdit')
        self.setGeometry(100, 100, 320, 210)

        # tạo một QLineEdit
        password = QLineEdit(self, echoMode=QLineEdit.EchoMode.Password)

        # xác định vị trí gắn các thành phần
        layout = QVBoxLayout()
        layout.addWidget(password)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Kết quả của chương trình trên là:

Ví dụ nhập mật khẩu bằng QLineEdit

Ví dụ nhập mật khẩu bằng QLineEdit

Để tạo một ô nhập liệu mật khẩu, bạn cần thiết lập echoModeQLineEdit.EchoMode.Password:

password = QLineEdit(self, echoMode=QLineEdit.EchoMode.Password)

Ví dụ tạo QLineEdit với dữ liệu được gợi ý nhập liệu

Để tạo một ô nhập liệu với các giá trị gợi ý văn bản, ta thực hiện theo các bước sau:
Đầu tiên, ta thêm lớp QLineEdit từ thư viện PyQt6.QtWidgets.
Thứ hai, tạo một QCompleter với một danh sách các văn bản mà bạn muốn gợi ý khi nhập liệu:

completer = QCompleter(word_list)

Thứ ba, tạo đối tượng QLineEdit và gọi phương thức setCompleter() để gắn danh sách văn bản gợi ý:

line_edit = QLineEdit(self)
line_edit.setCompleter(completer)

Quan sát ví dụ sau để biết cách tạo một ô nhập liệu có các văn bản gợi ý:

import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QLineEdit, QVBoxLayout, QCompleter)

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # thông tin cơ bản của cửa sổ
        self.setWindowTitle('Nhập liệu có gợi ý với QLineEdit')
        self.setGeometry(100, 100, 320, 210)

        # danh sách các từ gợi ý
        common_fruits = QCompleter([
            'Apple',
            'Apricot',
            'Banana',
            'Carambola',
            'Olive',
            'Oranges',
            'Papaya',
            'Peach',
            'Pineapple',
            'Pomegranate',
            'Rambutan',
            'Ramphal',
            'Raspberries',
            'Rose apple',
            'Starfruit',
            'Strawberries',
            'Water apple',
        ])

        # tạo QLineEdit
        fruit = QLineEdit(self)
        # gắn danh sách gợi ý vào QLineEdit
        fruit.setCompleter(common_fruits)

        # xác định vị trí các thành phần
        layout = QVBoxLayout()
        layout.addWidget(fruit)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Và kết quả của chương trình trên như sau:

Ví dụ nhập liệu có gợi ý với QLineEdit

Ví dụ nhập liệu có gợi ý với QLineEdit

Source code mẫu QLineEdit



Trong bài viết hướng dẫn này, bạn sẽ được tìm hiểu về cách sử dụng lớp QPushButton của thư viện PyQt6 để tạo một nút ấn.

Giới thiệu về QPushButton trong PyQt

Lớp QPushButton cho phép bạn khởi tạo ra một nút ấn, một sự kiện thông thường khi nhấn vào nút ấn thì một chức năng nào đó được thực hiện.
Để tạo ra một nút ấn, ta thực hiện theo các bước như sau:
Đầu tiên, ta thêm lớp QPushButton từ thư viện PyQt6.QtWidgets:

from PyQt6.QtWidgets import QPushButton

Thứ hai, ta gọi lớp QPushButton() để tạo ra một đối tượng như là một thể hiện của QPushButton, ta truyền vào một chuỗi ký tự để làm nhãn hiển thị trên nút ấn:

button = QPushButton("Nhấn vào tôi")

Thứ ba, ta lập trình để kết nối giữa sự kiện clicked với một hàm được thực thi:

button.clicked.connect(self.on_clicked)

Lưu ý: hàm on_clicked() là một hàm mà nó được thực hiện khi sự kiện nhấn vào nút ấn được kích hoạt.
Chương trình sau là một ví dụ minh chứng cho việc tạo một nút ấn trên cửa sổ chương trình:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Ví dụ khởi tạo nút ấn')
        self.setGeometry(100, 100, 320, 210)

        # tạo một nút ấn
        button = QPushButton('Nhấn vào đây')

        # thiết lập vị trí các thành phần trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(button)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    # tạo một đối tượng thể hiện của cửa sổ chính
    window = MainWindow()

    # bắt đầu một vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả của chương trình trên như sau:

Tạo Button từ QPushButton

Tạo Button từ QPushButton

Tạo nút ấn với biểu tượng icon

Để tạo một nút ấn với một icon, ta thực hiện theo các bước sau:
Đầu tiên, ta thêm lớp QIcon từ thư viện PyQt6.QtGui:

from PyQt6.QtGui import QIcon

Thứ hai, tạo một đối tượng như là một thể hiện của QPushButton:

button = QPushButton('Thêm')

Thứ ba, thêm icon vào nút ấn bằng cách gọi đến phương thức setIcon() của lớp QPushButton với một đối tượng từ lớp QIcon:

button.setIcon(QIcon('plus.png'))

Lưu ý: ta truyền vào một đường dẫn đến nơi lưu trữ icon để sinh ra đối tượng thể hiện của lớp QIcon.
Để nút ấn được tương thích với giao diện hơn, ta có thể thiết lập về kích thước của nút ấn bằng cách gọi đến phương thức setFixedSize().
Kích thước của nút ấn được xác định bởi đối tượng sinh ra từ lớp QSize với hai đối số được truyền vào là sự thể hiện của width và height. Để làm được điều đó, ta cần thêm vào lớp Qsize từ lớp PyQt6.QtCore.
Chương trình dưới đây nhằm hiển thị ra một nút ấn với một icon:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt6.QtCore import QSize
from PyQt6.QtGui import QIcon

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Ví dụ thêm icon vào nút ấn')
        self.setGeometry(100, 100, 320, 210)

        # tạo nút ấn
        button = QPushButton('Thêm')
        # thêm icon vào nút ấn
        button.setIcon(QIcon('plus.png'))
        # thiết lập kích thước của nút ấn
        button.setFixedSize(QSize(100, 30))

        # thiết lập bố cục trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(button)
        self.setLayout(layout)

        # hiển thị giao diện
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    # khởi tạo đối tượng của sổ
    window = MainWindow()

    # bắt đầu vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả của chương trình trên như sau:

Thêm icon vào Button

Thêm icon vào Button

Tạo một kết nối đến một hàm

Lớp QPushButton có thuộc tính checkable mà ở đó cho phép bạn sử dụng nút ấn như một trạng thái kiểm tra có thực hiện chức năng nào đó hay không.
Trạng thái chuyển đổi sẽ có hai trạng thái: on hoặc off. Nếu nhấn vào nút ấn thì trạng thái xác định đã nhấn hay chưa sẽ là true. Ngược lại sẽ là false.
Chương trình sau đây là ví dụ cho việc kết nối sự kiện nhấn nút ấn để thực hiện chức năng nào đó:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt6.QtCore import QSize
from PyQt6.QtGui import QIcon

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Ví dụ thêm icon vào nút ấn')
        self.setGeometry(100, 100, 320, 210)

        # tạo nút ấn
        button = QPushButton('Thêm')
        # thêm icon vào nút ấn
        button.setIcon(QIcon('plus.png'))
        # thiết lập kích thước của nút ấn
        button.setFixedSize(QSize(100, 30))

        button.setCheckable(True)
        button.clicked.connect(self.hien_thi)

        # thiết lập bố cục trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(button)
        self.setLayout(layout)

        # hiển thị giao diện
        self.show()

    # hàm hiển thị thông báo đã nhấn vào nút ấn
    def hien_thi(self, checked):
        print(checked)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    # khởi tạo đối tượng của sổ
    window = MainWindow()

    # bắt đầu vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả chương trình trên là:

Kết nối giữa nút ấn với hàm

Kết nối giữa nút ấn với hàm

Source code mẫu QPushButton


Giới thiệu về QLabel

Trong bài viết này chúng ta dược tìm hiểu về cách sử dụng lớp QLabel trong thư viện PyQt6. QLabel là một widget được dùng để hiển thị dữ liệu dạng văn bản, hình ảnh (hiển thị ảnh với nhiều định dạng như jpg, png, svg, …)
Để tạo một label widget, ta thực hiện theo các bước như sau:
Đầu tiên, thêm lớp QLabel widget từ thư viện PyQt6.QtWidgets:

from PyQt6.QtWidgets import QLabel

Thứ hai, tạo một đối tượng là một thể hiện (instance) của lớp QLabel:

label = QLabel("Hiển thị nội dung văn bản.")

Trong cú pháp trên, bạn đã truyền một chuỗi ký tự (string) mà bạn muốn hiển thị lên giao diện bằng QLabel.
Tuy nhiên, bạn cũng có thể sử dụng phương thức setText() để thiết lập giá trị chuỗi ký tự mà bạn muốn hiển thị sau khi tạo một đối tượng từ QLabel:

label = QLabel()
label.setText("Hiển thị nội dung văn bản.")

Bên trên là ta hiển thị nội dung văn bản lên giao diện, vậy, làm như nào để lấy nội dung mà ta thấy trên giao diện đã có. Để lấy giá trị nội dung văn bản của QLabel, bạn dùng phương thức text():

label.text()

Để xoá bỏ dữ liệu văn bản của QLabel, ta sử dụng phương thức clear():

label.clear()

Ví dụ về QLabel đầu tiên

Trong chương trình dưới đây, ta lập trình để hiển thị một nội dung văn bản bằng QLabel:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle("Ví dụ 1")
        self.setGeometry(150, 150, 320, 210)

        # tạo một QLabel
        label = QLabel("Hiển thị nội dung văn bản bằng QLabel")

        # thiết lập vị trí của QLabel trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(label)
        self.setLayout(layout)

        # hiển thị trên giao diện
        self.show()

# chương trình chính
if __name__ == "__main__":
    app = QApplication(sys.argv)

    # tạo của sổ chính
    window = MainWindow()

    # tạo vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả chương trình trên như sau:

Hiển thị văn bản bằng QLabel

Hiển thị văn bản bằng QLabel

Sử dụng QLabel để hiển thị một ảnh

Để hiển thị ảnh bằng strong QLabel, ta thực hiện theo các bước sau:
Đầu tiên, thêm lớp QPixmap từ thư viện PyQt6.QtGui:

from PyQt6.QtGui import QPixmap

Thứ hai, tạo đối tượng là một thể hiện của lớp QPixmap cùng với một đường dẫn đến vị trí lưu trữ ảnh:

pixmap = QPixmap("anh_dong_vat.jpg")

Với cú pháp trên, bạn phải chắc chắn rằng ảnh được lưu cùng thư mục chứa chương trình lập trình.
Thứ ba, tạo một đối tượng từ QLabel và sử dụng phương thức setPixmap() để hiển thị ảnh:

label = QLabel()
label.setPixmap(pixmap)

Chương trình hoàn chỉnh sau đây nhằm hiển thị ảnh trên giao diện sử dụng QLabel:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt6.QtGui import QPixmap

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Ví dụ 2')
        self.setGeometry(200, 200, 700, 700)

        # tạo thể hiện của QLabel
        label = QLabel()
        # đối tượng lưu trữ ảnh
        pixmap = QPixmap('anh_dong_vat.jpg')
        # gán ảnh lên label
        label.setPixmap(pixmap)

        # thiết lập vị trí trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(label)
        self.setLayout(layout)

        # hiển thị trên giao diện
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)

    # tạo đối tượng cửa sổ chính
    window = MainWindow()

    # tạo vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả chương trình trên như sau:

Hiển thị ảnh bằng QLabel

Hiển thị ảnh bằng QLabel

Lớp QPixmap hỗ trợ hiển thị nhiều định dạng ảnh như: bmp, gif, jpg, png, jpeg, …

Hiển thị ảnh hoạt hoạ bằng QLabel

Để hiển thị một ảnh hoạt hoạ, ta cần thực hiện các bước sau:
Thứ nhất, ta thêm lớp QMovie từ lớp PyQt6.QtGui:

from PyQt6.QtGui import QMovie

Thứ hai, tạo đối tượng như là một thể hiện của lớp QMovie cùng với đường dẫn đến ảnh hoạt hoạ:

movie = QMovie("dog-running.gif")

Thứ ba, tạo một đối tượng từ lớp QLabel:

label = QLabel()

Thứ tư, thiết lập hiển thị ảnh hoạt hoạ bằng QLabel sử dụng phương thức setMovie():

label.setMovie(movie)

Cuối cùng, gọi phương thức start() để chạy ảnh hoạt hoạ:

movie.start()

Chương trình dưới đây nhằm hiển thị ảnh hoạt hoạ bằng QLabel:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt6.QtGui import QMovie

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle("Ví dụ 3")
        self.setGeometry(200, 200, 200, 200)

        # tạo đối tượng label
        label = QLabel()
        # tạo đối tượng movie
        movie = QMovie("dog-running.gif")
        # gán movie vào label
        label.setMovie(movie)
        # bắt đầu movie
        movie.start()

        # thiết lập vị trí trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(label)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    # tạo đối tượng cửa sổ
    window = MainWindow()

    # bắt đầu vòng lặp sự kiện
    sys.exit(app.exec())

Kết quả chương trình trên như sau:

Hiển thị ảnh hoạt hoạ bằng QLabel

Hiển thị ảnh hoạt hoạ bằng QLabel

Source code mẫu QLabel



Trong bài viết này, các bạn sẽ được tìm hiểu về Signals và Slots khi làm việc với PyQt và chúng có cách hoạt động như nào trong một chương trình PyQt.

1. Giới thiệu về Signals và Slots

Thông thường, một chương trình Python có thứ tự thực hiện từ trái sang phải, từ trên xuống dưới:

  • Nhận thông tin đầu vào.
  • Xử lý dữ liệu đầu vào để tạo ra đầu vào.
  • Ghi kết quả ra màn hình hoặc vào tệp.

⇒Đây là một chương trình theo Phương pháp lập trình hướng cấu trúc.
Trong khi các bạn xây dựng một chương trình có giao diện GUI (Graphical User Interface) thì bạn sẽ sử dụng chính xác Phương pháp lập trình hướng sự kiện. Theo đó, trong mô hình lập trình theo hướng sự kiện, một chương trình sẽ có luồng như sau:

  • Tạo các thành phần trên giao diện như Label (nhãn), Line Edit (nhập dữ liệu từ bàn phím)Button (nút ấn).
  • Bắt đầu một vòng lặp sự kiện và chờ các sự kiện được xảy ra.
  • Phản hồi các sự kiện khi chúng được xảy ra bằng cách gọi các hàm thực thi tương ứng.

⇒Để kết nối các sự kiện với các hàm thực thi trong chương trình, ta sử dụng cơ chế Signals và Slots trong PyQt.

Signals

Signals là một thuộc tính đặc biệt của một đối tượng được phát ra khi một sự kiện được “phát động“. Ở đây, một sự kiện có thể là hành động của người dùng (như bấm chuột, kéo và thả, …), thời gian chờ hoặc thời gian hoàn thành một hoạt động không đồng bộ.

Slots

Một Slot được gọi là callable (có khả năng gọi được) khi nó có thể nhận một Signal và phản hồi lại nó.
Để phản hồi lại các sự kiện, bạn cần kết nối Signal với các Slot tương ứng. Theo đó, mỗi khi sự kiện được sinh ra, sự kiện phát sinh Signal và Slot được gọi và thực thi.
Trong PyQt, tất cả các lớp con của lớp QObject có thể gửi và nhận tín hiệu. Hầu như tất cả các lớp trong PyQt đều là lớp con của lớp QObject.

Ví dụ về Signals và Slots trong PyQt

Quan sát vào chương trình sau đây. Chương trình sau nhằm mục đích hiển thị một cửa sổ có một nút ấn, mỗi khi bạn nhấn vào nút ấn đó thì bạn sẽ nhận được thông báo clicked trong cửa sổ CMD (Command Prompt).

import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout)

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # thiết lập tiêu ề cửa sổ
        self.setWindowTitle('PyQt6 Signals & Slots')
        self.setGeometry(200, 200, 200, 200)

        # khởi tạo một nút ấn và kết nối với một Signal
        button = QPushButton("Click Me!")
        button.clicked.connect(self.display_information)

        # đặt button lên trên cửa sổ dùng vertical box layout
        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.addWidget(button)

        # hiển thị cửa sổ
        self.show()

    # xây dựng hàm
    def display_information(self):
        print("Clicked")

# chương trình chính
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Kết quả chương trình:

Signals và Slots trong PyQt

Signals và Slots trong PyQt

Vậy, chương trình trên hoạt động như nào?
Đầu tiên, ta tạo một nút ấn bằng QPushButton:

button = QPushButton("Click Me!")

Thứ hai, kết nối sự kiện clicked tới hàm display_information:

button.clicked.connect(self.display_information)

Tổng quát chung, cú pháp để kết nối một Signal với Slot như sau:

sender_object.signal_name.connect(receiver_object.slot_name)

Ngoài ra, bạn cũng có thể kết nối Signal với Slot khi truyền một vào đối số như sau:

button = QPushButton('Click Me!', clicked=self.display_information)

Thứ ba, định nghĩa hàm display_information. Hàm này chỉ nhằm một mục đích là hiển thị thông báo ra màn hình CMD:

    def display_information(self):
        print("Clicked")

⇒Khi bạn nhấn vào nút ấn, nút ấn sẽ phát ra một Signal để gọi đến hàm được kết nối.
Lưu ý: đoạn code đặt nút ấn trên cửa sổ sử dụng bố cục theo phương dọc, các bạn sẽ được tìm hiểu trong những bài sau:

# đặt button lên trên cửa sổ dùng vertical box layout
        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.addWidget(button)

Ví dụ sử dụng Signal để gửi dữ liệu

Một Signal có thể mang theo dữ liệu cung cấp trạng thái của một đối tượng khi sự kiện xảy ra. Ví dụ, Signal textChanged của QLineEdit có văn bản được nhập vào ô textbox.
Nếu Signal mang theo dữ liệu thì Slot được kết nối cũng nhận được dữ liệu đó.
Chương trình sau đây hiển thị QLineEditQLabel với nhiệm vụ như sau: khi bạn nhập cái gì đó vào QLineEdit thì QLabel sẽ hiển thị tương ứng.

import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout, QLabel)

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # thiết lập tiêu ề cửa sổ
        self.setWindowTitle('PyQt6 Signals & Slots')
        self.setGeometry(200, 200, 200, 200)

        # tạo các thành phần giao diện
        label = QLabel()
        line_edit = QLineEdit()
        line_edit.textChanged.connect(label.setText)

        # đặt các widgets lên trên giao diện
        layout = QVBoxLayout()
        layout.addWidget(label)
        layout.addWidget(line_edit)
        self.setLayout(layout)

        # hiển thị cửa sổ
        self.show()

# chương trình chính
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Cùng xem kết quả của chương trình trên:

Sử dụng tín hiệu gửi dữ liệu

Sử dụng tín hiệu gửi dữ liệu

Vậy, chương trình này hoạt động như nào?
Đầu tiên, tạo một QLabel. Trong đó, QLabel có phương thức setText() để thiết lập nội dung văn bản hiển thị lên nó.

label = QLabel()

Thứ hai, tạo một QLineEdit mới:

line_edit = QLineEdit()

Thứ ba, kết nối Signal textChanged với phương thức setText của QLabel:

line_edit.textChanged.connect(label.setText)

⇒Khi đó, bạn gõ nội dung gì đó vào QLineEdit thì:

  • Signal textChanged sẽ gửi nội dung văn bản được nhập.
  • QLabel nhận văn bản và chuyển nó tới phương thức setText().

Hamster Kombat là gì?

Trò chơi Hamster Kombat
Hamster Kombat là một trò chơi video nổi tiếng dành cho điện thoại di động, trong đó người chơi điều khiển các chú chuột hamster tham gia vào các trận đấu võ thuật hài hước. Trò chơi này đã thu hút sự quan tâm của rất nhiều người chơi với cách tiếp cận vui nhộn và thú vị.

Game Hamster

Theo bleepingcomputer.com, 250 triệu người chơi Hamster Kombat đang là mục tiêu tấn công của phần mềm độc hại.

Những kẻ tấn công đang lợi dụng sự phổ biến rộng rãi của trò chơi Hamster Kombat, đích của các kẻ tấn công là giả mạo các phần mềm này trên Android và Windows để lừa người dùng cài đặt phần mềm gián điệp và phần mềm độc hại để đánh cắp thông tin.

Hamster Kombat là một trò chơi di động nhấp chuột dành cho Android, nơi người chơi kiếm được loại tiền ảo bằng cách hoàn thành các nhiệm vụ đơn giản, chủ yếu bằng cách chạm vào màn hình.

Ra mắt vào tháng 3 năm 2024, trò chơi đã thu hút được sự quan tâm đáng kể do có khả năng kiếm được loại tiền số có tên là TON, dự kiến ​​sẽ được giới thiệu vào cuối năm nay.

Hamster Kombat dựa trên Telegram, yêu cầu người chơi tham gia kênh của nó trên Telegram, quét mã QR do bot cung cấp, sau đó khởi chạy ứng dụng web trên thiết bị Android của họ để chơi.

Trò chơi đã chứng kiến ​​​​sự tăng trưởng vượt bậc kể từ khi ra mắt, với hơn 250 triệu người chơi và 53 triệu người dùng trên kênh Telegram.

Mục tiêu nhắm vào “hamster”

Mặc dù là một ứng dụng được nhân bản trên Google Play có tên ‘Hamster Kombat – Earn Crypto‘, nhưng nhà phát triển dự án chính thức không có sẵn trên bất kỳ kênh chính thức nào ngoài Telegram, khiến những ai quan tâm đến việc tham gia dễ dàng trở thành con mồi cho tội phạm mạng và những kẻ lừa đảo.

Công ty về bảo mật ESET đã phát hiện nhiều trường hợp kẻ tấn công sử dụng trò chơi Hamster Kombat làm mồi nhử, thậm chí còn mở rộng sang các nền tảng khác ngoài Android, như Windows.

Phần mềm Hamster lừa đảo

Báo cáo của ESET cho biết: “Các kho lưu trữ GitHub mà chúng tôi tìm thấy có sẵn phần mềm độc hại trực tiếp trong các tệp phát hành hoặc chứa các liên kết để tải xuống từ các dịch vụ chia sẻ tệp bên ngoài”.

“Chúng tôi đã xác định được ba phiên bản khác nhau của bộ mã hóa Lumma Stealer ẩn trong kho lưu trữ: ứng dụng C++, ứng dụng Go và ứng dụng Python.”

Trong số ba phiên bản này, phiên bản Python được chuẩn bị cẩn thận hơn, thậm chí còn có trình cài đặt đồ họa để tiếp tục lừa người dùng cho đến khi kết thúc quá trình cài đặt phần mềm độc hại.

Khuyến nghị

Nếu quan tâm đến dự án Hamster Kombat, bạn nên lấy trực tiếp từ kênh chính thức của dự án trên Telegram hoặc truy cập trang web của dự án.

Tuy nhiên, cần lưu ý rằng ngay cả bản thân trò chơi chính hãng cũng chưa được kiểm tra kỹ lưỡng về tính bảo mật vì nó không có trên Google Play hay App Store. Sách trắng của dự án vẫn chưa được xuất bản và những lời hứa ra mắt token vẫn chưa được thực hiện.

Cũng cần lưu ý rằng ứng dụng nhân bản trên Google Play có một số báo cáo cho rằng nó lừa người dùng yêu cầu trả phí rút tiền và mà thực tế chưa rút bao giờ cả.

Mọi người nên nghi ngờ mọi ứng dụng sao chép Hamster Kombat được phân phối qua bất kỳ nền tảng hoặc phương pháp nào, vì ngay cả khi không phải tất cả đều chứa phần mềm độc hại thì chúng gần như chắc chắn là lừa đảo.

Decrypt.co đã tổng hợp một danh sách các dự án trò chơi tiền điện tử gắn với tiền số đã ra mắt vào năm 2024 và có sẵn các tính năng, vì vậy nếu quan tâm, bạn có thể cân nhắc đầu tư thời gian của mình vào những dự án đó.

Ngày 19/07/2024, Một bản cập nhật từ đối tác của Microsoft đã làm gián đoạn hệ thống hàng không, y tế, ngân hàng toàn cầu, các đài truyền hình …, và đã phơi bày sự mong manh của hệ thống Internet. Sự cố toàn cầu sập đám mây Microsoft là một tình huống nghiêm trọng khi hệ thống đám mây của Microsoft gặp sự cố ảnh hưởng đến tất cả các dịch vụ và sản phẩm của hãng trên toàn thế giới. Điều này gây ra sự gián đoạn trong việc truy cập vào dịch vụ như Office 365, Azure, Xbox Live, Skype và các sản phẩm phần mềm khác.

Khi xảy ra sự cố, người dùng gặp khó khăn nghiêm trọng trong việc sử dụng các sản phẩm và dịch vụ của Microsoft, các màn hình khai thác dịch vụ tại các sân bay xuất hiện màn hình xanh chết chóc. Vậy màn hình xanh chết chóc này là gì? Tìm ở đây sẽ cùng các bạn tìm hiểu thuật ngữ này.

Thuật ngữ “màn hình xanh chết chóc” hay “blue screen of death” (BSOD) được cho là đã được sử dụng lần đầu tiên bởi Microsoft vào những năm 1993. Thuật ngữ này xuất phát từ việc máy tính hiển thị một màn hình màu xanh và thông báo lỗi khi gặp sự cố nghiêm trọng.

Từ “chết chóc” trong thuật ngữ này chỉ ra tính nghiêm trọng của tình huống khi máy tính không hoạt động được nữa và cần can thiệp sửa chữa.

Màn hình xanh chết chóc (blue screen) là một thuật ngữ được sử dụng để mô tả tình trạng khi một máy tính hoặc thiết bị điện tử hiển thị một màn hình màu xanh, thường kèm theo thông báo lỗi, và không tiếp tục hoạt động.

Blue Screen

Điều này thường xuất hiện khi có lỗi nghiêm trọng trong hệ thống hoặc phần mềm của thiết bị.

Màn hình chết chóc có thể là hiệu ứng của các vấn đề như lỗi phần cứng, lỗi phần mềm, xung đột trình điều khiển (driver) hoặc các vấn đề liên quan đến hệ điều hành.

Khi máy tính gặp sự cố, thông điệp lỗi sẽ xuất hiện trên màn hình xanh, cho biết nguyên nhân của vấn đề và thông tin chi tiết để giúp người dùng khắc phục.

Một số cách các bạn có thể thử để khắc phục sự cố màn hình xanh chết chóc:

1. Khởi động lại máy tính: Thực hiện việc khởi động lại máy tính để xem liệu lỗi còn lặp lại hay hệ thống có thể tự cập nhật, tự khắc phục hay không.
2. Cập nhật phần mềm: Đảm bảo rằng bạn đang sử dụng phiên bản mới nhất của phần mềm và đã áp dụng tất cả các bản vá lỗi và cập nhật từ công ty.
3. Kiểm tra tương thích: Xác minh rằng phiên bản phần mềm bạn đang sử dụng hoạt động tương thích với hệ điều hành và các ứng dụng khác trên máy tính của bạn.
4. Liên hệ hỗ trợ: Nếu vấn đề vẫn tiếp tục sau khi bạn đã thử các biện pháp trên, liên hệ ngay với đơn vị hỗ trợ để yêu cầu giúp đỡ chi tiết và hướng dẫn từ chuyên gia.

Ngoài ra, việc ghi lại thông tin chi tiết về thông báo lỗi hoặc màn hình chết chóc (bao gồm mã lỗi nếu có) sẽ giúp người hỗ trợ xác định nguyên nhân và giải quyết sự cố nhanh chóng.

Việc bảo vệ thông tin cá nhân và an toàn khi truy cập internet ngày càng trở nên quan trọng trong thời đại công nghệ hiện nay. Dưới đây là một số biện pháp mà bạn có thể thực hiện để đảm bảo an toàn khi sử dụng internet:

1. Sử dụng mật khẩu mạnh: Đảm bảo mật khẩu của bạn là mạnh và không dễ đoán. Hãy sử dụng các ký tự đặc biệt, chữ số và chữ cái hoa thường kết hợp để tăng độ bảo mật.

Đặt mật khẩu mạnh

2. Cập nhật phần mềm định kỳ: Đảm bảo bạn luôn cập nhật phiên bản mới nhất của các phần mềm, hệ điều hành trên thiết bị của mình để bảo vệ khỏi các lỗ hổng bảo mật.

Cập nhật phần mềm định kỳ

3. Sử dụng phần mềm diệt virus: Cài đặt và sử dụng phần mềm diệt virus để ngăn chặn các phần mềm độc hại khỏi thiết bị của bạn.

Phần mềm diệt virus

4. Luôn kiểm tra URL trước khi truy cập: Đảm bảo bạn truy cập vào các trang web an toàn bằng cách kiểm tra URL trước khi nhấp vào liên kết.

Kiểm tra url

5. Tránh sử dụng mạng công cộng: Tránh sử dụng mạng Wi-Fi công cộng để truy cập thông tin cá nhân, vì thông tin của bạn có thể bị đánh cắp khi sử dụng mạng không an toàn.

wifi công cộng

6. Kiểm tra quyền riêng tư của ứng dụng: Trước khi cài đặt một ứng dụng, hãy đọc và hiểu các quyền riêng tư mà ứng dụng yêu cầu để tránh chia sẻ thông tin cá nhân không cần thiết.

Bảo vệ quyền riêng tư

Bằng cách thực hiện những biện pháp trên, timoday.edu.vn tin rằng sẽ giúp bạn bảo vệ thông tin cá nhân và thiết bị của mình an toàn khi truy cập internet.



Trong bài viết này, chúng ta thực hiện viết chương trình đầu tiên có sử dụng thư viện PyQt6. Chương trình này nhằm mục đích tạo ra một cửa sổ ứng dụng đơn giản. Qua đó, ta được tìm hiểu những lệnh cơ bản trong thư viện PyQt6, khởi tạo một ứng dụng và thực hiện lập trình bằng mã lệnh một cách thuần là như nào. Chúng ta hãy cùng bắt đầu với …

Chương trình đầu tiên với PyQt6

Quan sát vào chương trình dưới đây, chương trình này nhằm tạo ra một cửa sổ có tiêu đề là Hello World trên màn hình.

# khai báo thư viện
from PyQt6.QtWidgets import QApplication, QWidget
import sys

# tạo ứng dụng
app = QApplication(sys.argv)

# tạo cửa sổ chính
window = QWidget(windowTitle = 'Hello World')
window.show()

# khởi động vòng lặp sự kiện
app.exec()

Để chạy chương trình trên, ta dùng lệnh sau trong CMD với cú pháp:

python first_program.py

Trong đó, first_program.py chính là tên tệp mã nguồn python.
Ta quan sát kết quả:

Cửa sổ ứng dụng Hello World bằng PyQt

Cửa sổ ứng dụng Hello World bằng PyQt

Chương trình trên hoạt động như nào?

Đầu tiên, ta cần khai báo các lớp cần thiết như QApplicationQMainWidget từ thư viện PyQt6.Widgets.

from PyQt6.QtWidgets import QApplication, QWidget

Thứ hai, ta tạo một đối tượng từ lớp QApplication:

app = QApplication(sys.argv)
Mỗi một ứng dụng PyQt cần có một và chỉ một đối tượng QApplication.

Thứ ba, tạo một “thể hiện” (instance) của QWidget với tiêu đề là “Hello World” và gọi đến phương thức show() để hiện thị cửa sổ:

window = QWidget(windowTitle = 'Hello World')
window.show()

Cuối cùng, gọi đến phương thức exec() của QMainApplication để bắt đầu vòng lặp sự kiện.

app.exec()

Giới thiệu về Vòng lặp sự kiện (event loop)

Mỗi ứng dụng PyQt cần có một thể hiện của lớp QApplication. Đối tượng của QApplication lưu trữ vòng lặp sự kiện của ứng dụng.
Vòng lặp sự kiện chịu trách nhiệm quản lý các sự kiện của ứng dụng bao gồm các tương tác của người dùng lên GUI.
Khi ta tương tác với ứng dụng PyQt, ví dụ như nhấn phím hoặc nhấn nút bấm, PyQt sẽ tạo một sự kiện và đặt nó vào Hàng đợi sự kiện.
Vòng lặp sự kiện liên tục kiểm tra hàng đợi sự kiện. Nếu vòng lặp sự kiện tìm thấy sự kiện, nó sẽ chuyển tiếp sự kiện đó đến trình xử lý sự kiện cụ thể.
Trình xử lý sự kiện nhằm xử lý sự kiện và chuyển quyền điều khiển trở lại vòng lặp sự kiện để xử lý các sự kiện tiếp theo.

Hoạt động của Vòng lặp sự kiện

Hoạt động của Vòng lặp sự kiện

Lưu ý rằng mỗi ứng dụng PyQt chỉ có một và chỉ một vòng lặp sự kiện.